44
DDD – DOMAIN DRIVEN DESIGN

DDD - Domain Driven Design

Embed Size (px)

DESCRIPTION

Apresentação sobre DDD - Domain Driven Design na pós graduação em Engenharia de Software Centrada em Métodos Ágieis

Citation preview

Page 1: DDD - Domain Driven Design

DDD – DOMAIN DRIVEN DESIGN

Page 2: DDD - Domain Driven Design

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

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

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

O que é DDD?

Livro de Eric Evans (2004) Padrões Boas práticas Experiência

Page 6: DDD - Domain Driven Design

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

DDD

A volta da Orientação a Objetos?

Page 8: DDD - Domain Driven Design

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

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

Colocando o modelo de domínio para funcionar

Linguagem Ubíqua

Page 11: DDD - Domain Driven Design

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

Blocos de Construção do

Model

Driven

Design

Page 14: DDD - Domain Driven Design

Entidades

Page 15: DDD - Domain Driven Design

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

Agregados

Entidade

Objeto de Valor

EntidadeObjeto de

Valor

Agregado

Page 17: DDD - Domain Driven Design

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

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

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

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

Repositórios

Código ClienteRepositório

Agregados

Agregados

Agregados

Entidades

Entidades

Entidades

Busc

a

Cria

Entidade

Remov

er

Page 22: DDD - Domain Driven Design

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

Refatorando para compreender

profundamente o modelo

Page 24: DDD - Domain Driven Design

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

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

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

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

Projeto Estratégico

Page 29: DDD - Domain Driven Design

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

Projeto Estratégico - Padrões

Integração contínua Fazer figura próximo slide

Page 31: DDD - Domain Driven Design

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 33: DDD - Domain Driven Design

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

Projeto Estratégico - Padrões

Produtor – Consumidor

Testes automatizados Cliente - Fornecedor

Page 35: DDD - Domain Driven Design

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

Projeto Estratégico - Padrões

Camada Anti-Corrupção

Page 37: DDD - Domain Driven Design

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

Resumindo

Trabalhando com um modelo; Blocos de construção; Refatorando e evoluindo; Refinando, destilando.

Page 40: DDD - Domain Driven Design

Isso Não é Tudo

Page 41: DDD - Domain Driven Design

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

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

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.