38
Uma introdução a Domain Driven Design Daniel Cukier [email protected] IME-USP quinta-feira, 26 de fevereiro de 2009

DDD - Domain Driven Design

Embed Size (px)

DESCRIPTION

Uma introdução aos conceitos de Domain Driven Design

Citation preview

Page 1: DDD - Domain Driven Design

Uma introdução a

Domain Driven Design

Daniel [email protected]

IME-USP

quinta-feira, 26 de fevereiro de 2009

Page 2: DDD - Domain Driven Design

Padrões

Um padrão é uma regra de três partes que expressa a relação entre um certo contexto1, um

problema2 e uma solução 3

2

quinta-feira, 26 de fevereiro de 2009

Page 3: DDD - Domain Driven Design

O que é DDD

✦ Livro de Eric Evans (2004)

✦ Padrões

✦ Boas práticas

✦ Experiência

3

quinta-feira, 26 de fevereiro de 2009

Page 4: DDD - Domain Driven Design

Foco: Domínio

✦ Alinhamento com negócio

✦ Isolamento entre domínios

✦ Reutilização

✦ Mínimo acoplamento

✦ Independente de tecnologia

4

quinta-feira, 26 de fevereiro de 2009

Page 5: DDD - Domain Driven Design

DDD

A volta da Orientação a Objetos?

5

quinta-feira, 26 de fevereiro de 2009

Page 6: DDD - Domain Driven Design

Padrões no DDD[Contexto.]

[Discussão do problema.]

Resumo do problema.

Discussão da solução.

Por esta razão:Resumo da solução.

Conseqüências, implementação, exemplos.

[Contexto resultante.]6

quinta-feira, 26 de fevereiro de 2009

Page 7: DDD - Domain Driven Design

DDD

Colocando o modelo de

domínio para funcionar

Blocos de construção do

MDD

Refatorandopara compreender profundamente o

modelo

Projeto estratégico

7

quinta-feira, 26 de fevereiro de 2009

Page 8: DDD - Domain Driven Design

Colocando o modelo de domínio para

funcionar

quinta-feira, 26 de fevereiro de 2009

Page 9: DDD - Domain Driven Design

Linguagem Ubíqua

9

quinta-feira, 26 de fevereiro de 2009

Page 10: DDD - Domain Driven Design

Domínio

Model Driven Design

Modelo DesignRefatoração

guia

aperfeiçoa

Software não servepara o domínio

Desenvolvedoresperdidos e tecnologia

inadequada

10

quinta-feira, 26 de fevereiro de 2009

Page 11: DDD - Domain Driven Design

Blocos de Construção do

Model Driven Design

quinta-feira, 26 de fevereiro de 2009

Page 12: DDD - Domain Driven Design

Arquitetura em Camadas

Interfacede Usuário

Aplicação

Domínio

Infra-estrutura

12

DDD

quinta-feira, 26 de fevereiro de 2009

Page 13: DDD - Domain Driven Design

Entidades

13

quinta-feira, 26 de fevereiro de 2009

Page 14: 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

14

quinta-feira, 26 de fevereiro de 2009

Page 15: DDD - Domain Driven Design

Agregados

Entidade

Objeto de Valor

Objeto de Valor

Entidade

Agregado

Interface

quinta-feira, 26 de fevereiro de 2009

Page 16: 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

16

quinta-feira, 26 de fevereiro de 2009

Page 17: DDD - Domain Driven Design

Serviços

1. A operação não faz parte de nenhuma Entidade ou Objeto de Valor

2. Interface fala a língua do Domínio

3. Sem estado

17

quinta-feira, 26 de fevereiro de 2009

Page 18: DDD - Domain Driven Design

Módulos

✦ Agrupe conceitos do modelo, não código

✦ Baixo acoplamento / alta coesão

✦ Nomes da Linguagem Ubíqua

Modelo = HistóriaMódulo = Capítulo Módulo = Capítulo

Módulo = Capítulo Módulo = Capítulo

Módulo = Capítulo Módulo = Capítulo18

quinta-feira, 26 de fevereiro de 2009

Page 19: DDD - Domain Driven Design

Repositórios

19

Repositório

Agregados

Entidades

AgregadosAgregados

EntidadesEntidades

Agregados

EntidadesEntidades

Código Cliente

Entidade

busca

Agregadoscria

remove

Entidades

quinta-feira, 26 de fevereiro de 2009

Page 20: DDD - Domain Driven Design

Model Driven Design

Linguagem Ubíqua

ServiçosObjetos

ValorEntidades

Módulos

expressa modelo comonomes da

Repositórios

acesso com

acesso com

Agregados

enca

psul

a co

m

encapsula

com

mantém

integridadecom

Fábricas

encapsulacom

encapsulacom

20

quinta-feira, 26 de fevereiro de 2009

Page 21: DDD - Domain Driven Design

Refatorandopara compreender

profundamente o modelo

quinta-feira, 26 de fevereiro de 2009

Page 22: DDD - Domain Driven Design

Interfaces de Intenção Revelada

Eu faço exatamente isso.Não precisa se preocupar como

22

quinta-feira, 26 de fevereiro de 2009

Page 23: DDD - Domain Driven Design

Funções sem Efeitos Colaterais

✦ Colocar tudo 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

23

quinta-feira, 26 de fevereiro de 2009

Page 24: DDD - Domain Driven Design

Asserções

✦ Testes de unidade

✦ Usar facilidades da linguagem

✦ Testam o comportamento dos Comandos

24

quinta-feira, 26 de fevereiro de 2009

Page 25: DDD - Domain Driven Design

Model Driven Design

Linguagem Ubíqua

desenhadasusando

Interfaces de Intenção

Revelada

expressa modelo

através de

Asserções

torna efeitos colaterais

explícitos com

Funções sem Efeitos Colaterais

cria seguras e simples

tornacomposição

segura

quinta-feira, 26 de fevereiro de 2009

Page 26: DDD - Domain Driven Design

Projeto Estratégico

26

quinta-feira, 26 de fevereiro de 2009

Page 27: DDD - Domain Driven Design

Contexto Delimitado

As células existem porque sua membrana define o que está dentro ou

fora e determina o que pode entrar

27

quinta-feira, 26 de fevereiro de 2009

Page 28: DDD - Domain Driven Design

Integração Contínua

NovoElemento do

Modelo

codificação

Implementação

Testes

✦ Testes automatizados✦ Processo de build automático✦ Sincronização diária✦ Relatórios

28

quinta-feira, 26 de fevereiro de 2009

Page 29: DDD - Domain Driven Design

Mapa do Contexto

Mapa de Tradução

Modelo noContexto Modelo no

Contexto

29

quinta-feira, 26 de fevereiro de 2009

Page 30: DDD - Domain Driven Design

Núcleo Compartilhado

✦ É mais difícil fazer mudanças

✦ Evita (mas não elimina) duplicações

Mapa de Tradução

Compartilhado

30

quinta-feira, 26 de fevereiro de 2009

Page 31: DDD - Domain Driven Design

Produtor-Consumidor

✦ Testes automatizados

✦ Cliente-Fornecedor31

quinta-feira, 26 de fevereiro de 2009

Page 32: DDD - Domain Driven Design

Conformista

✦ Time fornecedor não tem 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

32

quinta-feira, 26 de fevereiro de 2009

Page 33: DDD - Domain Driven Design

ServiçoA

ServiçoB

Adaptador B

Adaptador A

Tradutor 1

Tradutor 2

Fachada

Camada Anti-corrupção

Classeelegante

Outras coisasbem feitas

Classe cara

Ok, isso a gente tem que

refatorar

Seu sistema

Camada Anti-corrupção

Interfacecomplicada

Coisas irrelevantes

Classe bagunçada

Você nem quer saber

Outro Sistema

33

quinta-feira, 26 de fevereiro de 2009

Page 34: DDD - Domain Driven Design

Caminhos Separados

✦ Quando integrar custa caro e o benefício é pequeno

✦ Contexto delimitado que não tem nenhuma conexão com os outros

34

quinta-feira, 26 de fevereiro de 2009

Page 35: DDD - Domain Driven Design

Resumindo

1. Trabalhando com um modelo

2. Blocos de construção

3. Refatorando e evoluindo

4. Refinando, destilando

35

quinta-feira, 26 de fevereiro de 2009

Page 36: DDD - Domain Driven Design

quinta-feira, 26 de fevereiro de 2009

Page 37: DDD - Domain Driven Design

Isso não é tudo

Serviço de Hospedagem

Aberto

Linguagem Publicada

SubdomíniosGenéricos

Núcleo doDomínio

Sentença da Visão do Domínio

NúcleoDestacado

MecanismosCoesivos

Núcleo Segregado

Núcleo Abstrato

Ordemque Evolui

Metáforade Sistema

Camadas de Responsa-

bilidade

Nível de Conheci-

mento

Arcabouço Componente

Plugável

Linguagem Ubíqua

Model Driven Design

Arquitetura em Camadas

EntidadesObjetos de

Valores

Serviços Módulos

Agregados Fábricas

Repositórios

Interfaces de Intenção Revelada

Funções sem Efeitos

Colaterais

Asserções

ContornosConceituais

Classes Isoladas

Fechamento de

Operações

Contexto Delimitado

Integração Contínua

Mapa do Contexto

Núcleo Compar-tilhado

Conformista

Camada Anti-

corrupção

Caminhos Separados

quinta-feira, 26 de fevereiro de 2009