54
Qualidade Alexandre Brandão Lustosa SOLID Domain Driven Design

IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Embed Size (px)

Citation preview

Page 1: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Qualidade

Alexandre Brandão Lustosa

SOLID

Domain Driven Design

Page 2: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

A MundiPagg é um gateway de pagamento único desenvolvido para transformar a indústria de pagamentos online brasileira.

Page 3: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Um rápido crescimentoSomos uma companhia jovem, mas com bastante experiência no mercado.

Em menos de três anos, a MundiPagg já processava 30 % do varejo online brasileiro.

Ano passado processamos cerca de R$ 6 bilhões e esperamos mais de R$ 15 bilhões em 2015.

Page 4: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Em 2014, recuperamos cerca de

R$ 87,5 milhõespara nossos clientes

Page 5: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

PLATAFORMA ONE

MUNDIPAGG

Page 6: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Nosso ecossistemaA MundiPagg é uma companhia da DLP que objetiva ser um canal para a adquirência.

Ecossistema DLP

ONLINE

FÍSICO

ADQUIRENTE

GATEWAY DE PAGAMENTOS

TEF / GATEWAY OFFLINE

PROCESSADORA

Pagar.me

Page 7: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Nossos clientes

LOJAS DEPARTAMENTO MODA ENTRETENIMENTO ALIMENTOS

Temos mais de 1500 lojas em nosso portfólio, algumas delas são as maiores marcas brasileiras e internacionais.

ÓLEO TV

Page 8: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD
Page 9: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Faça parte do nosso time!

[email protected]

[email protected]

"A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)

Page 10: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Faça parte do nosso time!

[email protected]

[email protected]

"A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)

Page 11: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Alexandre Brandão

{ Microsoft C# .Net Solution Developer, C++ Linux Developer, C/C++ Embedded Programmer }

<contatos> <twitter>

@abrandaolustosa </twitter> <skype>

[email protected] </skype></contatos>

Analista Desenvolvedor SêniorArquiteto de Sistemas

/* Linkedin: abrandaol*/

curl -data “experiencia=16_anos&motivacao=inovacao%20e%20pesquisa” https://www.mundipagg.com

Page 12: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ “Agenda” : {

“Qualidade” : “Pense, Modele, Teste, Faça”,“DDD” : “Domine o Domínio”,“SOLID” : {

“Conceito” : “Motivação”,“Interface” : “Programe para Interface”“Aplicação” : “Definição e Uso”

}}

} /* “Você pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direção.” */

Page 13: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

( Ran

king

)

http://blog.codeeval.com/codeevalblog/2015#.VWW9dbznreQ=

Page 14: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

[ DART ]

Page 15: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Qualidade de Software }

Page 16: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

[ Satisfação do Cliente ]

Tempo / Entregas

Custo Qualidade

Page 17: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Requisitos

Desenvolvimento

Implantação

*Ciclo e Processo Desenvolvimento;

Page 18: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

*Ciclo e Processo Desenvolvimento;

Requisitos

Desenvolvimento

Implantação

• Rollback de publicação;• Indisponibilidade;• Insatisfação do cliente;• Riscos no negócio;• Prejuízo financeiro;

Page 19: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

( Modelo V )Requisitos

Recursos

Arquitetura

Regras de Negócio

Desenvolvimento

Aceite do Cliente

Teste de Sistema

Teste de Integração

Teste Unitário

Plano

Plano

Plano

Plano

Valid

ação

Validação

Page 20: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

<risco>Foco na primeira entrega?

</risco>

Page 21: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

if(redução_de_risco ==

foco_na_primeira_entrega){throw new

Exception(“FALHA”);}else{

return “SUCESSO!!! :)”;}

Page 22: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{“Produtividade”:

“Seu time é ágil?”,}

Page 23: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

- Preciso ser ágil!• Requisitos • Planejamento• BluePrint• Documentação• RoadMap

• Deploy• Monitoramento• Controlde de

Incidentes

Page 24: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Modelo V / Desenvolvimento Ágil}

T=> Time + Cultura + Pessoas + Comunicação + Compromisso

T=> Tecnologia + Documentação + Investimento + Foco no Cliente

Page 25: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Domain Driven Design }

Projeto Orientado a Domínio

“Atacando as complexidades no coração do software”(Eric Evans)

Page 26: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

[ Objetivos]• Alinhamento as regras de negócio

• Favorecer reutilização de código

• Mínimo de acoplamento

• Independência de Tecnologia

Page 27: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

[ Modelos segundo Eric Evans]

• O modelo e o coração do design dão forma um ao outro

• O modelo é a espinha dorsal de uma linguagem utilizada pelos desenvolvedores

• O modelo é um conhecimento destilado

<Objetivo_do_DDD>Criar softwares melhores concentrando-se em um modelo de domínio e não na tecnologia.

</Objetivo_do_DDD>

Page 28: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Pilares da Orientação a Objeto }

• Herança

• Polimorfísmo

• Encapsulamento

• Abstração

Page 29: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Padrões de projeto }Padrões de criação

• Abstract Factory• Builder• Factory Method• Prototype• Singleton

Padrões estruturais

• Adapter• Bridge• Composite• Decorator• Façade (ou Facade)• Flyweight• Proxy

Padrões comportamentais

• Chain of Responsibility• Command• Interpreter• Iterator• Mediator• Memento• Observer• State• Strategy• Template Method• Visitor

Page 30: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

[ Modelo Conceitual ]

A modularidade se torna mais crítica a medida que do design cresce e se torna mais complexo.

Page 31: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

[ Mod

elo

Conc

eitu

al ]

Page 32: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

[ Isolando o Domínio ]

Cada conceito do modelo de domínio deve refletir um elemento da implementação.

Page 33: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ SOLID }É um acrônimo para:

- Single responsibility- Open-closed- Liskov substitution- Interface segregation- Dependency inversion

Criado por Michael Feathers como “Firt Five Principle”, e nomeado como SOLID por Robert C. Martin

Page 34: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ SOLID }

/*São cinco princípios básicos da orientação a objeto

*/

Page 35: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Single Responsibility }< Principio da Responsabilidade Única />

Uma classe deve ter um, e somente um, motivo para mudar

Page 36: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Single Responsibility }

public class Departamento { public void calculaNotaFiscal() { // seu código para calculo da nota fiscal } public void calculaPagamentoDeFuncionarios() { // seu código para cálculo do pagamento } public void verificaInadimplenciaDeClientes() { // seu código para a verificação de inadimplência }}

public class NotaFiscal { public void calculaNotaFiscal() { // seu código para cálculo da nota fiscal } }

public class CalculadoraDePagamento { public void calculaPagamentoDeFuncionarios() { // seu código para cálculo do pagamento } }

public class VerificadorDeInadimplencia { public void verificaInadimplenciaDeClientes() { // seu código para a verificação de inadimplência } }

{ Não respeita SOLID }

Page 37: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Open-Closed }

< Princípio Aberto-Fechado />

Você deve ser capaz de estender um comportamento de uma classe, sem modificá-lo.

Page 38: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Open-Closed }public abstract class Shape { public abstract double Area();}

public class Rectangle : Shape { public double Width { get; set; } public double Height { get; set; } public override double Area() { return Width*Height; }}

public class Circle : Shape{ public double Radius { get; set; } public override double Area() { return Radius*Radius*Math.PI; }}

public class DrawProcess{

public static double Area(Shape[] shapes){

double area = 0; foreach (var shape in shapes) { area += shape.Area(); }

return area; }}

Page 39: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Liskov Substitution }

< Princípio da Substituição de Liskov />

As classes derivadas devem ser substituíveis por suas classes base.

Page 40: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Liskov Substitution } public class BaseClass { public string ProductName { get; set; } public virtual void Shipping(){ } public virtual void Order(){ } }

public class DerivedClass :BaseClass{ public string CustomerInfo { get; set; } public void DeliveryAddress(){ }

public override void Shipping(){ base.Shipping(); } public override void Order(){ base.Order(); } }

public class Present { public static void Main() { var baseClass = new DerivedClass(); baseClass.ProductName = “XBox"; baseClass.Shipping(); baseClass.Order(); } }

Page 41: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Interface Segregation }

< Princípio da Segregação da Interface />

Muitas interfaces específicas são melhores do que uma interface única.

Page 42: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Dependency Inversion } < Princípio da inversão da dependência />

Dependa de uma abstração e não de uma implementação.

Page 43: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Dependency Inversion }

public interface IWorker {public void work();

}

public class Worker implements IWorker{public void work() {

// ....working}

}

public class SuperWorker implements IWorker{public void work() {

//.... working much more}

}

public class Manager {IWorker worker;

public void setWorker(IWorker w) {worker = w;

}

public void manage() {worker.work();

}}

class Manager {IWorker worker;

public void setWorker(IWorker w) {worker = w;}

public void manage() {worker.work();}}

Page 44: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Dependency Inversion }

Containers de injeção de dependência:

Exemplos: Microsoft Unity, Ninject, Spring, Spring.net, etc...

Uso:1) Registro da interface e tipo2) Resolve e carrega o tipo registrado para a interface ou identificador

Page 45: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ Container de DI / IOC – Microsoft Unity }

public void RegisterTypes(){var container = new UnityContainer();container.RegisterType<ILivro, Livro>();

}

public void Process(){var livro = container.Resolve<ILivro>();

//Do something}

Registro do tipo

Resolve o tipo

Page 46: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{ ! }

Page 47: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

{Seja hoje um pessoa

melhor do que você foi ontem

}

Page 48: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Pesquise...

Page 49: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Pesquise...Estude...

Page 50: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Pesquise...Estude...

Domine...

Page 51: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Pesquise...Estude...

Influencie...

Domine...

Page 52: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Obrigado :)

Page 53: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Perguntas?

Page 54: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Obrigado :)

E-mail: [email protected]

Skype: [email protected]

Twitter: @abrandaolustosaLinkedIn: abrandaol