O documento discute os conceitos fundamentais de Domain-Driven Design (DDD): (1) Ubiquitous Language é uma linguagem comum entre especialistas técnicos e de domínio; (2) Domain Model é um modelo conceitual do domínio que representa visões de negócio e técnicas; (3) Patterns são soluções para problemas recorrentes que ligam o Domain Model à implementação.
3. DDD O que é?
É um conjunto de práticas,
técnicas e princípios de
designpara apoiar projetos de software.
4. Em sua essência, o Domain-Driven Design
é uma maneira de usar modelos
para criar software, especialmente a parte
do software que trata regras de negócio
complexas em forma de comportamento.
Eric Evans
“
Ref.: http://www.infoq.com/br/articles/ddd-10-anos
7. Organizations that don't adopt DDD are more
likely building miniservices rather than
microservices, and will not attain the full
MSA agility and scalability advantages.
Anne Thomas | Gartner
“
Ref.: http://www.gartner.com/document/3579057
8. DDD Os 3 pilares...
UBIQUITOUS
LANGUAGE
DOMAIN
MODEL
PATTERNS
menos motivos para
mal-entendidos
representação de uma ideia
abstrações
de problemas
recorrentes
1
2
3
10. Ubiquitous
Language
O que é?
É a linguagem comum e
onipresente entre especialistas
técnicos e especialistas de domínio.
TECHNICAL
EXPERT
DOMAIN
EXPERT
Ref.: http://www.projectcartoon.com
11. Theubiquitous language is not
something like UML, XML Schema,
or C#; it's a natural, but very distilled,
language for the domain.
Jimmy Nilsson
“
Ref.: Applying Domain-Driven Design and Patterns by Jimmy Nilsson
12. Destilação?
Implica na essência de uma
linguagem comum para um
determinado domínio.
Ref.: Bull (study) by Pablo Picasso, 1946
Ubiquitous
Language
14. Domain
Model
O que é?
É um modelo conceitual do
domínio que represente visões de
negócio e técnicas implementáveis.
Ref.: Applying Domain-Driven Design and Patterns by Jimmy Nilsson
What about
this?
Orders can
contain
multiple items!
15. Domain
Model
Os 5 princípios...
A confecção de um Domain Model
eficazprecisa:
LIGAR O DOMAIN
MODEL À
IMPLEMENTAÇÃO
CULTIVAR UMA
LINGUAGEM
BASEADA NO
DOMAIN MODEL
DESENVOLVER UM
DOMAIN MODEL
RICO EM
CONHECIMENTO
REFINAR O
DOMAIN MODEL
COLHER IDEIAS E
EXPERIMENTÁ-LAS
17. Domain
Model
Exemplo!
Definição de “rede” para especialistas
em PCI:
Ref.: Domain-Driven Design by Eric Evans
1
2
DRAFT
DRAFT
Condutor de fios que pode conectar qualquer número de componentes
de uma PCI e transmitir um sinal elétrico a tudo que esteja conectado.
18. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Os componentes não teriam que ser chips.
Então eu deveria chamá-los apenas de “componentes”?
Nós os chamamos apenas de “instâncias de componentes”.
Pode haver vários componentes do mesmo tipo.
A caixa da “rede” parece ser exatamente
uma instância de componente.
Ref.: Domain-Driven Design by Eric Evans
19. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Ele não está usando a nossa notação.
Para eles, tudo é uma caixa, suponho.
Confesso que sim. Acho melhor eu explicar
essa notação um pouco mais.
Não basta dizer que um sinal chega a um
ref-des, temos que saber qual pino.
Depois de alguns minutos explicando a notação...
Ref.: Domain-Driven Design by Eric Evans
20. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Ref-des?
O mesmo que instância de componentes. Ref-des é o
nome usado em uma ferramenta que utilizamos.
Quer dizer então que um pino pertence a apenas uma instância
de componentes e se conecta a apenas uma rede?
De qualquer forma, uma rede conecta um determinado
pino de uma instância a um determinado pino de outra.
Ref.: Domain-Driven Design by Eric Evans
21. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Além disso, cada rede tem uma topologia, um arranjo que determina
a forma em que os elementos da rede se conectam.
Sim, exatamente.
OK.
Após alguns minutos de reflexão...
Ref.: Domain-Driven Design by Eric Evans
22. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Que tal isso?
Ref.: Domain-Driven Design by Eric Evans
Durante algum tempo, a equipe decide
explorar a propagação de um sinal...
3 DRAFT
23. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Entendo como o sinal é transmitido pela rede a todos
os pinos ligados, mas como é que ele vai além?
Será que a topologia tem algo a ver com isso?
Não. O componente envia o sinal.
Ref.: Domain-Driven Design by Eric Evans
Certamente não podemos modelar o comportamento
interno de um chip. Seria muito complicado.
Não é necessário. Podemos usar uma simplificação.
Apenas uma lista de envios de dados através do
componente, de certos pinos para certos pinos.
25. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Ref.: Domain-Driven Design by Eric Evans
Após mais alguns minutos de reflexão...
Mas o que exatamente você precisa saber
com base nessa computação?
Estamos interessados nos atrasos prolongados de sinal.
Por exemplo, qualquer trajeto de sinais que tenha
sido mais que dois ou três pulsos. Se o trajeto
for muito longo, o sinal pode não chegar
durante o ciclo do relógio.
26. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Mais que três pulsos... Então precisamos calcular a extensão
dos trajetos. E o que conta como sendo um pulso?
Cada vez que o sinal passa por uma rede, é um pulso.
Ref.: Domain-Driven Design by Eric Evans
Então poderíamos prolongar o número de pulsos,
e uma rede poderia incrementá-lo.
Após alguns minutos de rascunho...
28. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
A única parte que não ficou clara para mim é de onde vêm os “envios”.
Esses dados são armazenados para cada instância de componente?
Os envios seriam os mesmos para todas as instâncias de componente.
Ref.: Domain-Driven Design by Eric Evans
Então o tipo de componente determina os envios.
Após alguns minutos de reflexão...
30. Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Não sei exatamente o que significa cada uma das partes,
mas imagino que o armazenamento de envios de cada
componente teria um aspecto parecido com isso.
Desculpe. Coloquei detalhes demais. Estava só pensando...
Agora, então, onde entra a topologia?
Ela não é usada para a simulação de teste.
Ref.: Domain-Driven Design by Eric Evans
Então vou deixá-la de for por enquanto, OK? Podemos trazê-la
de volta quando chegarmos a essas características.
31. Domain
Model
Exemplo!
Através da coleta e refino de idéias,
questionamentos e explicações,
o Domain Model do projeto PCI foi
desenvolvido:
Ref.: Domain-Driven Design by Eric Evans
33. Patterns O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
ATENÇÃO!
Os padrões ligam o Modelo
à implementação!
Rimou!
39. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
“Grupos de Entidades e Objetos de Valor com uma
fronteira. Deixe uma das Entidades no Agregado ser o
ponto de acesso (a raiz do Agregado).”
Ref.: Domain-Driven Design by Eric Evans
Ref.: Applying Domain-Driven Design and Patterns by Jimmy Nilsson
40. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
“Quando a criação de um objeto, ou um agregado
inteiro, torna-se complicada ou revela muito da
estrutura interna, as fábricas fornecem
encapsulamento.”
Ref.: Domain-Driven Design by Eric Evans
Ref.: http://www.dofactory.com/net/factory-method-design-pattern
42. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
“O Contexto Limitado é um padrão central no DDD que
divide grandes modelos em diferentes Contextos
Limitados e explicita suas inter-relações.”
Ref.: Domain-Driven Design by Eric Evans
Ref.: http://martinfowler.com/bliki/BoundedContext.html
44. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
Ref.: Domain-Driven Design by Eric Evans
CONTEXT MAP
SHARED KERNEL
CUSTOMER / SUPLIER
CONFORMIST
ANTICORRUPTION LAYER
SEPARATE WAYS
OPEN / HOST SERVICE
PUBLISHED LANGUAGE
“Um Mapa de Contexto é um
documento que descreve os
diferentes Contextos Limitados e as
relações entre eles.”
46. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
Ref.: Domain-Driven Design by Eric Evans
CONTEXT MAP
SHARED KERNEL
CUSTOMER / SUPLIER
CONFORMIST
ANTICORRUPTION LAYER
SEPARATE WAYS
OPEN / HOST SERVICE
PUBLISHED LANGUAGE
Compartilhamento de um subconjunto
do modelo de domínio entre duas
equipes:
48. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
Ref.: Domain-Driven Design by Eric Evans
CONTEXT MAP
SHARED KERNEL
CUSTOMER / SUPLIER
CONFORMIST
ANTICORRUPTION LAYER
SEPARATE WAYS
OPEN / HOST SERVICE
PUBLISHED LANGUAGE
Relação cliente / fornecedor entre duas
equipes com propagação de modelo:
51. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
Ref.: Domain-Driven Design by Eric Evans
CONTEXT MAP
SHARED KERNEL
CUSTOMER / SUPLIER
CONFORMIST
ANTICORRUPTION LAYER
SEPARATE WAYS
OPEN / HOST SERVICE
PUBLISHED LANGUAGE
Exposição de funcionalidades através de
serviços para outros sistemas clientes:
52. Patterns
LAYERED ARCHITECTURE
ENTITIES
VALUE OBJECTS
SERVICES
MODULES
AGGREGATES
FACTORIES
REPOSITORIES
BOUNDED CONTEXT
DDD PATTERNS
O que são?
São soluções gerais para
problemas recorrentesem
determinados contextos.
Ref.: Domain-Driven Design by Eric Evans
CONTEXT MAP
SHARED KERNEL
CUSTOMER / SUPLIER
CONFORMIST
ANTICORRUPTION LAYER
SEPARATE WAYS
OPEN / HOST SERVICE
PUBLISHED LANGUAGE
Publicação de uma linguagem comum
entre contextos para expor
funcionalidades:
55. O que é?
É um diagrama da UML 2.0 que auxilia na
representação de estruturas de
aplicações estáticas.
Ref.: http://www.ibm.com/developerworks/br/rational/library/content/RationalEdge/sep04/bell/index.html
Diagrama de
Classes
56. O que é?
Também conhecido como Domain
Model Pattern (PoEAA), trata-se de
um modelo de objeto(s) do domínio que
incorpora comportamento e dados.
Rich Model
DDDRef.: http://martinfowler.com/eaaCatalog/domainModel.html
57. O que é?
Lazy Load Pattern (PoEAA)
caracteriza-se por um objeto que não
contém todos os dados que você precisa,
mas sabe como obtê-lo.
Lazy Load
Ref.: http://martinfowler.com/eaaCatalog/lazyLoad.html
58. O que é?
Dependency Injection Pattern
viabiliza a criação de objetos “fracamente”
acoplados.
Dependency
Injection
Ref.: http://martinfowler.com/articles/injection.html
61. O que é?
É um jogo de tabuleiro cujo o
objetivo é tornar-se o mais
rico jogadoratravés da compra,
aluguel ou venda de propriedades.
Banco
Imobiliário
62. Regras gerais:
Banco
Imobiliário
JOGADORES
Podem jogar de 2 a 6 pessoas, as quais escolhem a cor de seus
peões, colocando-os no ponto de partida. Em seguida embaralham-
se as cartas de Sorte e Revés, que são colocadas de cabeça para
baixo no local indicado, no centro do tabuleiro.
Cada jogador deve receber: 8 notas de $1, 10 de $5, 10 de $10, 10 de
$50, 8 de $100 e 2 notas de $500.
Todo dinheiro restante irá para o banco, juntamente com os títulos
de propriedade. É aconselhável que uma pessoa jogue somente
como banqueiro, porém se também quiser participar do jogo, deve
tomar cuidado para não misturar suas notas e propriedades com as
do Banco.
63. Banco
Imobiliário
COMEÇO DO JOGO
O primeiro jogador lança os dados e, conforme o número de pontos
que tirar, avança o seu peão pela esquerda para o espaço atingido.
Num só espaço podem parar vários peões ao mesmo tempo. Se cair
num terreno ou empresa poderá comprá-lo do banqueiro, pagando o
preço indicado no tabuleiro.
De acordo com as indicações constantes dos lugares alcançados,
pagam-se impostos, recebem-se lucros, tira-se um cartão de SORTE
ou REVÉS e executa-se a ordem respectiva, devolvendo o cartão,
colocando-o por baixo do baralho do qual foi tirado.
Tirando uma dupla (2 e 2, 3 e 3, etc.) o jogador tem direito a novo
lançamento; uma segunda dupla da direito igual, mas se tirar uma
terceira dupla, vai para a prisão.
Regras gerais:
64. Banco
Imobiliário
PRISÃO
Se o jogador cair no campo “VÁ PARA A PRISÃO” ou se tirar 3 duplas
seguidas, irá com o seu peão para a prisão. Se porém alcançar a
prisão em lances regulares será considerado visitante e poderá
continuar normalmente no jogo quando chegar a sua vez.
Da prisão o jogador poderá sair se conseguir numa das suas 3
próximas jogadas tirar uma dupla. Se não conseguir na 4ª jogada
pagara $50 ao banqueiro e andará o número de pontos conseguidos
nos dados. Também poderá sair da prisão se possuir o cartão “SAÍDA
LIVRE DA PRISÃO”.
Regras gerais:
65. Banco
Imobiliário
HONORÁRIOS
Cada vez que o jogador alcançar o PONTO DE PARTIDA ou por ele
passar receberá do banqueiro $200 como HONORÁRIOS.
TERRENO OU EMPRESA COM DONO: Se o jogador alcançar um
terreno ou empresa que já tenha sido adquirido, pagará o aluguel ou
taxa correspondente, ao respectivo proprietário, conforme dados
constantes do título.
O dono do terreno ou propriedade, deverá cobrar antes que o
jogador seguinte lance os dados, caso contrário não terá mais direito.
Regras gerais:
66. Banco
Imobiliário
CONSTRUÇÕES
Logo que o jogador possua todo um grupo de propriedades da
mesma cor, ele poderá construir casas pagando ao Banqueiro os
preços indicados nos títulos.
Em cada terreno pode-se construir 4 casas e tendo construído 4
casas, no mesmo terreno, pode-se construir nele um hotel.
O jogador não pode colocar 3 casas em uma propriedade e nenhuma
noutra, do mesmo grupo de cor. Ele deve colocar uma em cada
propriedade do mesmo grupo de cor, antes de colocar a segunda e
assim sucessivamente até a compra do hotel.
Regras gerais:
67. Banco
Imobiliário
TROCAS E VENDAS ENTRE JOGADORES
É permitido aos jogadores vender ou trocar terrenos ou empresas
entre si, quando acharem conveniente por preços a combinar.
No caso de terrenos que possuam casas ou hotel, o dono deverá
vende-las ao Banco pela metade do preço, para depois vender o
terreno.
Se algum jogador comprar uma propriedade ou terreno hipotecado,
ao resgatar o título de posse, ele deverá pagar além do valor da
hipoteca mais 20% do valor da mesma a título de juros.
Regras gerais:
68. Banco
Imobiliário
HIPOTECAS
Terrenos sem construção (caso haja casas ou hotel é necessário antes
vende-las ao Banco pela metade do preço) e empresas podem ser
hipotecadas pelos valores determinados nos títulos por qualquer
período de tempo.
Regras gerais:
69. Banco
Imobiliário
PAGAMENTOS
Os pagamentos devem ser efetuados sempre em dinheiro. Se o
jogador não tiver dinheiro para pagar ao Banco ou a um jogador, ele
deve obedecer esta ordem de negociações:
• Vendas de casas e hotéis pela metade do preço pago.
• Hipotecar ou vender suas propriedades.
No caso de vendas ele poderá colocar em leilão as propriedades
visando um lucro maior. Caso ninguém queira comprá-la o Banco
pagará seu valor nominal.
Regras gerais:
70. Banco
Imobiliário
FALÊNCIA
Se mesmo após vender suas casas e hotéis, hipotecar ou vender suas
propriedades o jogador não conseguir pagar suas dívidas ele irá à
falência, e se retirará do jogo.
O dinheiro conseguido será entregue ao jogador credor. Caso haja
propriedades hipotecadas o Banco deverá resgatá-las e o dinheiro
conseguido irá para o credor. As propriedades devem ser colocadas
em leilão.
Obs.: Durante um jogo nenhum jogador poderá dar ou emprestar
dinheiro a outro.
Regras gerais:
71. Banco
Imobiliário
TÉRMINO DO JOGO
O jogo termina quando ficar somente um jogador (os outros foram à
falência). Somam-se ou valores possuídos através das notas,
terrenos, propriedades, casas e hotéis.
Se algum jogador possuir terreno ou propriedades hipotecadas, ele
deverá computar metade do valor pago por elas.
Regras gerais:
74. Banco
Imobiliário
Início do DRAFT...
Uma das formas de iniciar o rascunho
de um Domain Model é a
Análise Linguística como estratégia
para encontrar classes conceituais.
Ref.: Applying UML and Patterns by Craig Larman
83. Self-Learn Sobre DDD...
Domain-Driven Design Distilled
Vaughn Vernon
http://www.safaribooksonline.com/library/view/domain-driven-design-distilled/9780134593449
DDD Sample
Community
http://dddsample.sourceforge.net
Domain-Driven Design Quickly
Abel Avram & Floyd Marinescu
http://www.infoq.com/minibooks/domain-driven-design-quickly
84. Self-Learn Sobre DDD...
10 anos de DDD com Eric Evans
Eberhard Wolff & Eric Evans
http://www.infoq.com/br/articles/ddd-10-anos
DDD & Microservices
Eric Evans
https://www.youtube.com/watch?v=yPvef9R3k-M
Domain-Driven Design Fundamentals
Julie Lerman & Steve Smith
http://www.pluralsight.com/courses/domain-driven-design-fundamentals