SlideShare uma empresa Scribd logo
DOMAIN DRIVEN DESIGN
Jefferson Mariano de Souza
DEFINIÇÃO
abordagem arquitetural
forma de diminuir a complexidade do coração do
sistema
delimitar contextos
lado mais filosófico do que técnico
FORMA DE DIMINUIR A COMPLEXIDADE
DO CORAÇÃO DO SISTEMA
resolver o problema do negócio
resolver a parte principal do sistema
utiliza diversos design patterns, mas não está
acoplado a nenhum
Não se trata apenas de criar camadas, entidades,
repositórios etc
Design guiado pelo domínio (razão da aplicação
existir)
HISTÓRIA
Criado em 2003, por Eric Evans
"DDD é algo mutável, pode evoluir com o passar do
tempo"
QUANDO USAR?
aplicações complexas
sistemas que uma decisão errada pode impactar o
projeto inteiro
DOMÍNIO
o coração do negócio (razão do negócio existir)
tem base em um conjunto de ideias, conhecimento
e processos
sem domínio, os processos auxiliares não tem muita
utilidade
PARA RESOLVER O PROBLEMA DE
NEGÓCIO, NÃO PRECISAMOS
NECESSARIAMENTE DE CÓDIGO
Mas sim...
COMUNICAÇÃO
conseguir falar com todos os envolvidos em uma
mesma linguagem
conversar entre todas as áreas, com todos os
envolvidos no problema
LINGUAGEM UBÍQUA
é a linguagem falada no dia a dia no contexto da
empresa
utiliza as terminologias da realidade do negócio
desenvolvedores precisam conhecer a fundo a
linguagem do negócio
objetivo: conseguir modelar o sistema para
representar o negócio real
LINGUAGEM UBÍQUA
Exemplo: O que é "Cliente"?
quem loga no sistema?
quem compra algum produto?
quem contrata um serviço?
LINGUAGEM UBÍQUA
DOMAIN EXPERT
DOMAIN EXPERT
quem conhece profundamente o negócio
quem vive o dia a dia do negócio
Com a comunicação em ordem
Domínio bem definido
o próximo passo é identificar subdomínios
IDENTIFICAR SUBDOMÍNIOS
Domínio é o core business, o coração do problema
SUBDOMÍNIO
subáreas do sistema que possuem complexidades e
diversas regras
refle muito em como a empresa vai funcionar
IDENTIFICAR CONTEXTOS DA
EMPRESA
cada contexto tem sua própria forma, sua própria
linguagem
as complexidades mudam de acordo com cada uma
das áreas
COMUNICAÇÃO ENTRE OS
CONTEXTOS
apesar de cada contexto ser delimitado, geralmente
um precisa se relacionar com o outro
identificar quais são as partes do domínio principal
identificar quais são os domínios auxiliares
identificar relações entre os domínios
MAPA DE CONTEXTO
mapa que detalha a relação entre os domínios
possibilita uma visão geral do sistema
separar os pontos de complexidade
identificar pontos auxiliares para o sistema
conseguir atacar o que realmente importa
RESUMINDO: PILARES DO DDD
linguagem ubíqua
contextos delimitados (bounded contexts) - até
onde vai a reponsabilidade de cada parte do
sistema
mapas de contexto - comunicação entre os
contextos
E NO CÓDIGO?
Entidades
Objetos de Valor
Agregações
Repositórios
Serviços
tudo baseado na linguagem criada antes de chegar
no código
só começa o código quando a complexidade for
definida e entendida
A maior parte do esforço está na parte de entender a
complexidade
ENTIDADE
algo único no sistema, com representatividade no
negócio
existe no sistema, pode mudar seu estado
este item geralmente possui um id (que não existe
por existir, mas para diferenciar um do outro)
é um domínio rico, tem uma razão de existir
Cada contexto tem suas próprias entidades
Posso ter a entidade "Cliente" em mais de um
contexto
uma entidade pode aparecer em diversos contextos
com nomes diferentes
EXEMPLO: CADASTRO DE USUÁRIO
QUAL O TIPO DE DADO?
nome
cpf
email
OBJETO DE VALOR
classe que não tem identidade única, é usada como
auxiliar
(parar de usar tipos primitivos para tudo)
CPF -> possui validação própria
E-Mail -> possui validação própria
AGGREGATES
Relação Pedido x item
Pedido possui N itens
Item só existe se existir pedido
Pedido: Raiz, por onde o processo começa
Pedido: Root Aggregate
REPOSITÓRIO
Parte responsável por persistir as entidades
Geralmente existe apenas para o aggregate root
Ex: eu persisto o pedido, não o item
SERVICE
Operação que não é uma parte natural de uma
Entidade ou Objeto de Valor
Geralmente relacionada a um conceito de domínio
É uma operação definida em termos de outros
elementos do modelo
Geralmente é uma operação stateless
CONCLUSÃO
DDD é bastante amplo
Foco no negócio
Não se prende a uma tecnologia específica (não é
framework da moda)
Não é só trabalhar com services e
repositories
PARA SABER MAIS
Domain Driven Design - Eric Evans
Domain Driven Design Distilled - Vernon Vaughn
OBRIGADO
Apresentação disponível em:
https://studiojms.github.io/domain-driven-design-
introduction

Mais conteúdo relacionado

Semelhante a DDD - Domain Driven Design

Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5
oliveiraprog
 
Cs 2
Cs 2Cs 2
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
sauloroos01
 
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Taller Negócio Digitais
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de Sistemas
Clayton de Almeida Souza
 
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
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Daniel Everling
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
Graziella Bonizi
 
Servico ad
Servico adServico ad
Servico ad
fernandao777
 
Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)
Rafael Salerno de Oliveira
 
Programando com prazer com DDD
Programando com prazer com DDDProgramando com prazer com DDD
Programando com prazer com DDD
Giovanni Bassi
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
Ítalo Bandeira
 
Introdução a Domain-Driven Design
Introdução a Domain-Driven DesignIntrodução a Domain-Driven Design
Introdução a Domain-Driven Design
Maicon Carlos Pereira
 
Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDD
Leonn Leite
 
Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
Wende Mendes
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
Wende Mendes
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
Rogerio Fontes
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
tdc-globalcode
 
clean code
clean codeclean code
clean code
Douglas Siviotti
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
elliando dias
 

Semelhante a DDD - Domain Driven Design (20)

Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5
 
Cs 2
Cs 2Cs 2
Cs 2
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de Sistemas
 
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!
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
Servico ad
Servico adServico ad
Servico ad
 
Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)
 
Programando com prazer com DDD
Programando com prazer com DDDProgramando com prazer com DDD
Programando com prazer com DDD
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Introdução a Domain-Driven Design
Introdução a Domain-Driven DesignIntrodução a Domain-Driven Design
Introdução a Domain-Driven Design
 
Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDD
 
Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
clean code
clean codeclean code
clean code
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
 

DDD - Domain Driven Design