DDD - Domain Driven Design
-
Upload
engenharia-de-software-agil -
Category
Education
-
view
5.952 -
download
0
description
Transcript of DDD - Domain Driven Design
![Page 1: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/1.jpg)
DDD – DOMAIN DRIVEN DESIGN
![Page 2: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/2.jpg)
Domain-Driven Design
Domain-Driven Design não é uma tecnologia ou metodologia, mas sim uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domain model.
![Page 3: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/3.jpg)
Domain-Driven Design
O modelo pode ser expresso de várias formas, como uma apresentação em PowerPoint, diagramas em UML, rascunho de papel, peças de Lego, o mesmo o código da aplicação.
![Page 4: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/4.jpg)
Padrões
É uma regra de três partes que expressa a relação entre um contexto1, um problema² e uma solução³.
![Page 5: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/5.jpg)
O que é DDD?
Livro de Eric Evans (2004) Padrões Boas práticas Experiência
![Page 6: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/6.jpg)
Foco: Domínio
Alinhamento com negócio Isolamento entre domínios Reutilização Mínimo acoplamento Independente de tecnologia
![Page 7: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/7.jpg)
DDD
A volta da Orientação a Objetos?
![Page 8: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/8.jpg)
Padrões no DDD
[Contexto] [Discussão do problema]
Resumo do problema Discussão da solução
Por esta razãoResumo da solução
Consequências, implementação, exemplos. [Contexto resultante]
![Page 9: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/9.jpg)
DDDColocando o modelo de
domínio para funcionar
Blocos de construção do
MDD
Refatorando para
compreender profundament
e o modelo
Projeto estratégico
![Page 10: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/10.jpg)
Colocando o modelo de domínio para funcionar
Linguagem Ubíqua
![Page 11: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/11.jpg)
Model Driven Design
Domínio
Modelo
DesignDesenvolvedores
perdidos e tecnologia
inadequada
Sofware não serve para o
domínio
Guia
Aperfeiçoa
Refatoração
![Page 12: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/12.jpg)
Blocos de Construção do
Model
Driven
Design
![Page 13: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/13.jpg)
Arquitetura em Camadas
![Page 14: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/14.jpg)
Entidades
![Page 15: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/15.jpg)
Objetos de Valores
Pra quem não precisa de identidade; Imutáveis; Descrevem coisas; Ciclo de vida rápido; Exemplos: strings, números, cores.
![Page 16: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/16.jpg)
Agregados
Entidade
Objeto de Valor
EntidadeObjeto de
Valor
Agregado
![Page 17: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/17.jpg)
Fábricas
Quando construir (Agregados) for complexo;
Devem ser sempre abstratas; Não fazem parte do modelo, mas do
domínio.
![Page 18: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/18.jpg)
Serviços
A operaçao não faz parte de nenhuma Entidade ou Objeto de Valor;
Interface fala a língua do Domínio; Sem estado.
![Page 19: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/19.jpg)
Módulos
Agrupe conceitos do modelo, não código;
Baixo acoplamento / alta coesão; Nomes da Linguagem Ubíqua.
![Page 20: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/20.jpg)
Módulos
Módulo = Capítulo
Módulo = Capítulo
Módulo = Capítulo
Módulo = Capítulo
Módulo = Capítulo
Módulo = Capítulo
Modelo = História
![Page 21: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/21.jpg)
Repositórios
Código ClienteRepositório
Agregados
Agregados
Agregados
Entidades
Entidades
Entidades
Busc
a
Cria
Entidade
Remov
er
![Page 22: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/22.jpg)
Linguagem Ubíqua
Model Driven Design
Serviços Objetos
Valor
Entidades
Módulos
Agregados
Expressa modelo como
Encapsula com
Mantém Integridade com
Repositórios
Acessa com
Acessa com
Fábricas Encapsula
com
Encapsula com
![Page 23: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/23.jpg)
Refatorando para compreender
profundamente o modelo
![Page 24: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/24.jpg)
Padrões para refinar o modelo
Interfaces de intenção revelada
Eu faço exatamente
isso. Não precisa se preocupar
como.
![Page 25: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/25.jpg)
Padrões para refinar o modelo
Funções sem efeitos colaterais
Colocar tudo o que for possível em funções, principalmente em cálculos complexos
Onde não der, usar comandos que fazem poucas operações e não retornam objetos do domínio
![Page 26: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/26.jpg)
Padrões para refinar o modelo
Asserções
Testes de unidade; Usar facilidades da linguagem; Testam o comportamento dos comandos.
![Page 27: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/27.jpg)
Linguagem Ubíqua
Model Driven Design
Interfaces de
Intenção Revelada
Funções sem
Efeitos Colaterai
s
Asserções
Expressa modelo através
de
Torna efeitos
colateraisexplícitos
com
desenhadas
usando
cria seguras
e simples
Torna
composiç
ão segura
![Page 28: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/28.jpg)
Projeto Estratégico
![Page 29: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/29.jpg)
Projeto Estratégico - Padrões
Contexto Delimitado
As células existem porque sua membrana define o que está dentro ou fora e determina o que pode entrar.
![Page 30: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/30.jpg)
Projeto Estratégico - Padrões
Integração contínua Fazer figura próximo slide
![Page 31: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/31.jpg)
Integração Contínua
Testes automatizados; Processo de build automático; Sincronização diária; Relatórios.
Novo Elemento do
Modelo
Codificação
Im-ple-
men-tação
Testes
![Page 32: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/32.jpg)
Projeto Estratégico - Padrões
Mapa do Contexto
![Page 33: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/33.jpg)
Projeto Estratégico - Padrões
Núcleo Compartilhado É mais difícil fazer mudanças; Evita (mas não elimina) duplicações.
![Page 34: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/34.jpg)
Projeto Estratégico - Padrões
Produtor – Consumidor
Testes automatizados Cliente - Fornecedor
![Page 35: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/35.jpg)
Projeto Estratégico - Padrões
Conformista
Time fornecedor não interesse em ajudar; Tira complexidade de tradução entre
contextos; Mesma linguagem ubíqua; Parecido com Núcleo Compartilhado , mas
cliente não tem poder de modificação.
![Page 36: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/36.jpg)
Projeto Estratégico - Padrões
Camada Anti-Corrupção
![Page 37: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/37.jpg)
Projeto Estratégico - Padrões
Caminhos separados
Quando integrar custa caro e o benefício é pequeno;
Contexto delimitado que não tem nenhuma conexão com os outros.
![Page 38: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/38.jpg)
Resumindo
Trabalhando com um modelo; Blocos de construção; Refatorando e evoluindo; Refinando, destilando.
![Page 39: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/39.jpg)
Refinando um modelo
![Page 40: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/40.jpg)
Isso Não é Tudo
![Page 41: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/41.jpg)
DDD
Os padrões citados são apenas alguns dos descritos em Domain Driven Design. DDD é uma forma de desenvolver software que, por estar ligado a boas práticas de Orientação a Objetos, tem muito a ver com desenvolvimento ágil.
A própria idéia de Padrões, que promove eficácia na comunicação, é um dos valores pregados pelos agilistas.
São técnicas que levarão ao desenvolvimento de serviços de qualidade, sistemas seguros e fáceis de dar manutenção, levando, consequentemente, à satisfação dos seus clientes com a rapidez que o mercado de hoje exige.
![Page 42: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/42.jpg)
Vantagens de adotar o DDD
Quanto mais próximo você está do negócio, menos sofre com mudanças
O entendimento do desenvolvedor sobre o negócio, evitando erros e ajudando no negócio em si, questionando e sugerindo otimizações.
Código menos acoplado e mais coeso.
![Page 43: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/43.jpg)
Conclusão
Procure utilizar DDD em aplicações com domínios complexos
Linguagem Ubíqua e MDD são o cerne da DDD
Não se apegue à rigidez conceitual, e claro, não lute contra os frameworks.
![Page 44: DDD - Domain Driven Design](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/5590b50d1a28ab105f8b457f/html5/thumbnails/44.jpg)
Referências
Evans, Eric. Domain Driven Design. Addison – Wesley, 2004.
http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/en/pdf/DomainDrivenDesignQuicklyOnline.pdf
http://vimeo.com/3545313