SlideShare uma empresa Scribd logo
1 de 85
Domain
Driven
Design
STEP BY STEP
O que é
Domain-Driven
Design?
DDD O que é?
É um conjunto de práticas,
técnicas e princípios de
designpara apoiar projetos de software.
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
Por que DDD?
MICROSERVICE
FIRST
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
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
Ubiquitous
Language?
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
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
Destilação?
Implica na essência de uma
linguagem comum para um
determinado domínio.
Ref.: Bull (study) by Pablo Picasso, 1946
Ubiquitous
Language
Hum... E o que é
Domain Model?
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!
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
Não entendi
nada!
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.
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
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
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
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
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
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.
Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Algo mais ou menos assim?
Ref.: Domain-Driven Design by Eric Evans
4 DRAFT
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.
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...
Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Que tal isso?
Ref.: Domain-Driven Design by Eric Evans
5 DRAFT
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...
Domain
Model
Exemplo!
Conversa entre especialistas de PCI e um
especialista técnico:
Eles seriam os mesmos para cada instância?
Ref.: Domain-Driven Design by Eric Evans
6 DRAFT
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.
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
Tudo bem...
E os Patterns?
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!
DOMAIN
MODEL
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.
“Ajuda a estruturar aplicativos que podem ser
decompostos em grupos de subtarefas em que cada
grupo de subtarefas se encontra em um nível particular
de abstração.”
Isola o
código!
Ref.: Domain-Driven Design by Eric Evans
Ref.: POSA by Frank Buschmann e outros
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.
“Muitos objetos não são fundamentalmente definidos
por seus atributos, mas sim por um fio de continuidade
e identidade.”
Ref.: Domain-Driven Design by Eric Evans
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.
“Muitos objetos não têm nenhuma identidade
conceitual. Esses objetos descrevem algumas
características de uma coisa.”
Ref.: Domain-Driven Design by Eric Evans
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.
“As responsabilidades que não se encaixam
naturalmente em Entidades ou Objetos de Valor podem
ser fatoradas para os Serviços.”
Ref.: Domain-Driven Design by Eric Evans
Ref.: http://12factor.net/backing-services
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.
“Módulos são usados como um método de organização
de conceitos e tarefas relacionadas para reduzir a
complexidade.”
Ref.: Domain-Driven Design by Eric Evans
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
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
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.
“Um objeto para localizar uma determinada Entidade
(ou um conjunto de Entidades) que está no meio do
ciclo de vida.”
Ref.: Domain-Driven Design by Eric Evans
Ref.: Applying Domain-Driven Design and Patterns by Jimmy Nilsson
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
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
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.”
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
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:
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:
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:
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
Isolamento de modelos
por tradução:
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
Conectividade zero entre
contextos distintos:
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:
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:
Acabou?
NÃO
NÃO
NÃO
NÃO
NÃO
NÃO
NÃO
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
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
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
O que é?
Dependency Injection Pattern
viabiliza a criação de objetos “fracamente”
acoplados.
Dependency
Injection
Ref.: http://martinfowler.com/articles/injection.html
Que tal um
exemplo prático?
BANCO
LABIMOBILIÁRIO
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
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.
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:
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:
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:
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:
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:
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:
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:
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:
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:
Componentes:
Banco
Imobiliário
1
TABULEIRO
6
PEÕES
2
DADOS
12
HOTÉIS
32
CASAS
380
NOTAS
30
SORTE / REVÉS
28
TÍTULOS
Vamos fazer
um Domain
Model?
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
Banco
Imobiliário
Ref.: Applying UML and Patterns by Craig Larman
Domain Model...
15 minDomain
Model
Distillation
Domain Model...
Banco
Imobiliário
Ref.: http://www.informit.com/articles/article.aspx?p=1398622&seqNum=13
15 minDomain
Model
Distillation
Domain Model...
Banco
Imobiliário
E
V
S
ENTITIES
VALUE OBJECTS
SERVICES
REPOSITORIESR
E E
E E E
S V
R
15 minDomain
Model
Distillation
Domain Model...
Banco
Imobiliário
E
V
S
A
ENTITIES
VALUE OBJECTS
SERVICES
FACTORIES
REPOSITORIES
AGGREGATES
BOUNDED CONTEXT
F
R
B
E
EE
E
EE E
F
VS
R
AB
Como posso
aprender mais?
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
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
Obrigado!
Diego Gazotto Dezembro
diegodezembro@gmail.com
http://br.linkedin.com/in/diegodezembro

Mais conteúdo relacionado

Mais procurados

Implementing Microservices by DDD
Implementing Microservices by DDDImplementing Microservices by DDD
Implementing Microservices by DDDAmazon Web Services
 
skilllocation Foliensatz zu Microsoft Azure
skilllocation Foliensatz zu Microsoft Azureskilllocation Foliensatz zu Microsoft Azure
skilllocation Foliensatz zu Microsoft AzureCarola Pantenburg
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignNader Albert
 
Introduction to Event-Driven Architecture
Introduction to Event-Driven Architecture Introduction to Event-Driven Architecture
Introduction to Event-Driven Architecture Solace
 
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Isaac de Souza
 
CQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility SegregationCQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility SegregationBrian Ritchie
 
Cloud native integration
Cloud native integrationCloud native integration
Cloud native integrationKim Clark
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Sotaro Kimura
 
High level design document template
High level design document templateHigh level design document template
High level design document templateanosha jamshed
 
Business Analyst Job Course.pptx
Business Analyst Job Course.pptxBusiness Analyst Job Course.pptx
Business Analyst Job Course.pptxRohit Dubey
 
Introduction to Batch Processing on AWS
Introduction to Batch Processing on AWSIntroduction to Batch Processing on AWS
Introduction to Batch Processing on AWSAmazon Web Services
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationOğuzhan Soykan
 
Building Distributed Applications with AWS Step Functions
Building Distributed Applications with AWS Step FunctionsBuilding Distributed Applications with AWS Step Functions
Building Distributed Applications with AWS Step FunctionsAmazon Web Services
 
4 solution monitoring
4 solution monitoring4 solution monitoring
4 solution monitoringlea-com
 
Domain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and MicroservicesDomain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and MicroservicesRadosław Maziarka
 
hbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability Engineeringhbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability EngineeringRyuji Tamagawa
 

Mais procurados (20)

Amazon CloudFront
Amazon CloudFrontAmazon CloudFront
Amazon CloudFront
 
Implementing Microservices by DDD
Implementing Microservices by DDDImplementing Microservices by DDD
Implementing Microservices by DDD
 
skilllocation Foliensatz zu Microsoft Azure
skilllocation Foliensatz zu Microsoft Azureskilllocation Foliensatz zu Microsoft Azure
skilllocation Foliensatz zu Microsoft Azure
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
ThoughtWorks Approach 2009
ThoughtWorks Approach 2009ThoughtWorks Approach 2009
ThoughtWorks Approach 2009
 
Agile Scrum Methodology
Agile Scrum MethodologyAgile Scrum Methodology
Agile Scrum Methodology
 
Introduction to Event-Driven Architecture
Introduction to Event-Driven Architecture Introduction to Event-Driven Architecture
Introduction to Event-Driven Architecture
 
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
 
CQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility SegregationCQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility Segregation
 
Cloud native integration
Cloud native integrationCloud native integration
Cloud native integration
 
Introducción a microservicios
Introducción a microserviciosIntroducción a microservicios
Introducción a microservicios
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
 
High level design document template
High level design document templateHigh level design document template
High level design document template
 
Business Analyst Job Course.pptx
Business Analyst Job Course.pptxBusiness Analyst Job Course.pptx
Business Analyst Job Course.pptx
 
Introduction to Batch Processing on AWS
Introduction to Batch Processing on AWSIntroduction to Batch Processing on AWS
Introduction to Batch Processing on AWS
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
Building Distributed Applications with AWS Step Functions
Building Distributed Applications with AWS Step FunctionsBuilding Distributed Applications with AWS Step Functions
Building Distributed Applications with AWS Step Functions
 
4 solution monitoring
4 solution monitoring4 solution monitoring
4 solution monitoring
 
Domain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and MicroservicesDomain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and Microservices
 
hbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability Engineeringhbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability Engineering
 

Semelhante a DDD - Step by Step

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!Isaac de Souza
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignLambda3
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceCarolina Karklis
 
Programando com prazer com DDD
Programando com prazer com DDDProgramando com prazer com DDD
Programando com prazer com DDDGiovanni Bassi
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareivanassisleal
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoMarcius Brandão
 

Semelhante a DDD - Step by Step (20)

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven Design
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Programando com prazer com DDD
Programando com prazer com DDDProgramando com prazer com DDD
Programando com prazer com DDD
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
DDD agile rio
DDD agile rioDDD agile rio
DDD agile rio
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
clean code
clean codeclean code
clean code
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 

DDD - Step by Step

  • 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
  • 13. Hum... E o que é Domain Model?
  • 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.
  • 24. Domain Model Exemplo! Conversa entre especialistas de PCI e um especialista técnico: Algo mais ou menos assim? Ref.: Domain-Driven Design by Eric Evans 4 DRAFT
  • 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...
  • 27. Domain Model Exemplo! Conversa entre especialistas de PCI e um especialista técnico: Que tal isso? Ref.: Domain-Driven Design by Eric Evans 5 DRAFT
  • 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...
  • 29. Domain Model Exemplo! Conversa entre especialistas de PCI e um especialista técnico: Eles seriam os mesmos para cada instância? Ref.: Domain-Driven Design by Eric Evans 6 DRAFT
  • 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
  • 32. Tudo bem... E os Patterns?
  • 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!
  • 34. DOMAIN MODEL 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. “Ajuda a estruturar aplicativos que podem ser decompostos em grupos de subtarefas em que cada grupo de subtarefas se encontra em um nível particular de abstração.” Isola o código! Ref.: Domain-Driven Design by Eric Evans Ref.: POSA by Frank Buschmann e outros
  • 35. 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. “Muitos objetos não são fundamentalmente definidos por seus atributos, mas sim por um fio de continuidade e identidade.” Ref.: Domain-Driven Design by Eric Evans
  • 36. 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. “Muitos objetos não têm nenhuma identidade conceitual. Esses objetos descrevem algumas características de uma coisa.” Ref.: Domain-Driven Design by Eric Evans
  • 37. 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. “As responsabilidades que não se encaixam naturalmente em Entidades ou Objetos de Valor podem ser fatoradas para os Serviços.” Ref.: Domain-Driven Design by Eric Evans Ref.: http://12factor.net/backing-services
  • 38. 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. “Módulos são usados como um método de organização de conceitos e tarefas relacionadas para reduzir a complexidade.” Ref.: Domain-Driven Design by Eric Evans
  • 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
  • 41. 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. “Um objeto para localizar uma determinada Entidade (ou um conjunto de Entidades) que está no meio do ciclo de vida.” Ref.: Domain-Driven Design by Eric Evans Ref.: Applying Domain-Driven Design and Patterns by Jimmy Nilsson
  • 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
  • 43. 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
  • 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.”
  • 45. 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
  • 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:
  • 47. 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:
  • 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:
  • 49. 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 Isolamento de modelos por tradução:
  • 50. 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 Conectividade zero entre contextos distintos:
  • 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
  • 59. Que tal um exemplo prático?
  • 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
  • 75. Banco Imobiliário Ref.: Applying UML and Patterns by Craig Larman Domain Model...
  • 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