imaster developer week rj - qualidade de software: solid/ddd
TRANSCRIPT
![Page 1: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/1.jpg)
Qualidade
Alexandre Brandão Lustosa
SOLID
Domain Driven Design
![Page 2: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/4.jpg)
Em 2014, recuperamos cerca de
R$ 87,5 milhõespara nossos clientes
![Page 5: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/5.jpg)
PLATAFORMA ONE
MUNDIPAGG
![Page 6: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/8.jpg)
![Page 9: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/9.jpg)
Faça parte do nosso time!
"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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/10.jpg)
Faça parte do nosso time!
"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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/12.jpg)
{ “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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/13.jpg)
( Ran
king
)
http://blog.codeeval.com/codeevalblog/2015#.VWW9dbznreQ=
![Page 14: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/14.jpg)
[ DART ]
![Page 15: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/15.jpg)
{ Qualidade de Software }
![Page 16: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/16.jpg)
[ Satisfação do Cliente ]
Tempo / Entregas
Custo Qualidade
![Page 17: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/17.jpg)
Requisitos
Desenvolvimento
Implantação
*Ciclo e Processo Desenvolvimento;
![Page 18: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/18.jpg)
*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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/19.jpg)
( 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/20.jpg)
<risco>Foco na primeira entrega?
</risco>
![Page 21: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/22.jpg)
{“Produtividade”:
“Seu time é ágil?”,}
![Page 23: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/23.jpg)
- 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/24.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/25.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/26.jpg)
[ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/27.jpg)
[ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/28.jpg)
{ Pilares da Orientação a Objeto }
• Herança
• Polimorfísmo
• Encapsulamento
• Abstração
![Page 29: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/29.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/30.jpg)
[ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/31.jpg)
[ Mod
elo
Conc
eitu
al ]
![Page 32: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/32.jpg)
[ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/33.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/34.jpg)
{ SOLID }
/*São cinco princípios básicos da orientação a objeto
*/
![Page 35: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/35.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/36.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/37.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/38.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/39.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/40.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/41.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/42.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/43.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/44.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/45.jpg)
{ 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](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/46.jpg)
{ ! }
![Page 47: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/47.jpg)
{Seja hoje um pessoa
melhor do que você foi ontem
}
![Page 48: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/48.jpg)
Pesquise...
![Page 49: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/49.jpg)
Pesquise...Estude...
![Page 50: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/50.jpg)
Pesquise...Estude...
Domine...
![Page 51: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/51.jpg)
Pesquise...Estude...
Influencie...
Domine...
![Page 52: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/52.jpg)
Obrigado :)
![Page 53: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/53.jpg)
Perguntas?
![Page 54: IMaster Developer Week RJ - Qualidade de software: SOLID/DDD](https://reader033.vdocuments.com.br/reader033/viewer/2022052514/58e894ed1a28ab291c8b49db/html5/thumbnails/54.jpg)
Obrigado :)
E-mail: [email protected]
Skype: [email protected]
Twitter: @abrandaolustosaLinkedIn: abrandaol