SlideShare uma empresa Scribd logo
Domain Driven Design (DDD)


Wende Mendes Higino

Email: wende.mendes@bluesoft.com.br
Objetivo
  O que o DDD pode fazer por você
Visão de futuro
Porque os arquitetos de
software devem se
preocupar com o DDD ?

Temos que fazer software
para durar
O que é DDD ?

“ É uma abordagem para desenvolvimento de software ”
Qual é o foco do DDD ?
Banco de dados ?
Focado no domínio
Principais premissas do (DDD)

   “ Para a maioria dos
projetos de software o foco
   principal deve ser no
  domínio e na lógica do
         domínio ”

“ Desenhos complexos de
   domínio devem ser
 baseados em modelos ”
Domínio ?
Domínio:

 - Área de conhecimento do software

 Exemplo:
   domínio do software de uma farmácia:
     - controle de preço, estoque, etc.
Modelo ?
O mundo
O mundo




    Não precisa ser impecavelmente realista
Modelos ?
  - Modelo são baseados em abstrações.
   - É uma idéia e deixa um monte de detalhes de
fora.
O mundo




      Excesso de informações atrapalha
Brasil
São Paulo
BlueSoft
BlueSoft




     Usado para resolver problemas
Recapitulando:

 * Modelos são abstrações

   - O que não interessa fica de fora

   - O modelo deve refletir no código ou são irrelevantes

   - O modelo deve representar o seu domínio
Não há padrão para um modelo
Pode ser assim:
Ou assim:
Compõe o modelo...
Ubiquitous Language:

                 - Vem dos business experts

                - É refletida no modelo

                - É refletida no código

                - É falada pelo time
Não               Sim

- Tabela           - Carga

- Classe           - Conta corrente

- método           - Agendamento de horários

- String           - Deposito bancário

- Banco de dados   - Realizar matricula
Ouça business experts

É ele que entende do negócio.

É ele que conhece o problema, não
você
Distância dos desenvolvedores e o
       contexto do domínio
- Camadas devem fazer sentido.
“ verifique suas responsabilidades ”

- As camadas tem que ter separação
Camadas do DDD
"Esta camada é o coração de um software de negócio”


                (Eric Evans)
Conceitos do DDD
Entidade: São objetos que
                    tem significado no domínio




Entidade: possuem identidades
Objetos de Valor
- Objetos de valor não tem identidade para   o negócio

- São reconhecidos por seus atributos

- Geralmente são imutáveis



                      Exemplo:               Azul

                                             Verde

                                             Vermelho
Agregações



 - Reúnem entidades e objetos de valor de
 maneira que faça sentido para o negócio

 - Toda agregação tem uma raiz
Algumas regras:
Serviços



- Serviços resolvem problemas de negócio, mas
não são entidades e nem objetos de valor

- Se meu serviço precisar retornar algum
objeto, este objeto tem que estar no meu
domínio
Serviços
Exemplo :
Factories
- Criam objetos

- Objetos devem ser criados consistentes
Factories

Exemplo :
Repositórios


- Responsáveis por persistir e destruir os objetos

- Responsáveis por guardar e recuperar objetos

- Falar a língua do negócio

* Vai ter métodos:
         - obter por data
         - obter por cpf
         - obter por vencimento
Exemplo de um projeto
Exemplo de um projeto
Camadas do domínio
Camadas do domínio
Camadas do domínio
Ciclo de vida de um
objeto para o DDD:

- Factories criam objetos
Ciclo de vida de um
objeto para o DDD:


  - Factories criam objetos

  - Repositórios recuperam objetos
Ciclo de vida de um
objeto para o DDD:

  - Factories criam objetos

  - Repositórios recuperam objetos

  - Repositórios alteram objetos
Ciclo de vida de um
   objeto para o DDD:

- Factories criam objetos

- Repositórios recuperam objetos

- Repositórios alteram objetos

- Repositórios destroem objetos
Ciclo de vida:


- Factories criam objetos

- Repositórios recuperam objetos

- Repositórios alteram objetos

- Repositórios destroem objetos
Funciona assim ?
Funciona assim ?
Feedback é fundamental.

O tempo todo !
Recomendação
- O DDD aceita mudanças

- Não brigue com elas
Recomendações:




                 “ O foco são os projetos com regras de
                 negócio complexas ”


                 “ Quando as empresas fam que o projeto é
                 simples, comece a tomar cuidado, pois eles
                 crescem ”


                 “ Comece com projetos pequenos para
                 aprender ”
Obrigado
Bibliografia
Domain-Driven-Design

Mais conteúdo relacionado

Mais procurados

DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
Daniel Cukier
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
André Borgonovo
 
Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
Wende Mendes
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do software
Yan Justino
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Daniel Everling
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
armeniocardoso
 

Mais procurados (6)

DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do software
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
 

Semelhante a Domain-Driven-Design

Como fazer-os-recrutadores-implorarem-para-te-contratar
Como fazer-os-recrutadores-implorarem-para-te-contratarComo fazer-os-recrutadores-implorarem-para-te-contratar
Como fazer-os-recrutadores-implorarem-para-te-contratar
Kleber Carvalho
 
clean code
clean codeclean code
clean code
Douglas Siviotti
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
iMasters
 
DDD in PHP
DDD in PHPDDD in PHP
DDD in PHP
Paulo Victor Gomes
 
Scrum na sua Empresa
Scrum na sua EmpresaScrum na sua Empresa
Scrum na sua Empresa
Fabiano Milani
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
Frederico Cabral
 
Programando com prazer com DDD
Programando com prazer com DDDProgramando com prazer com DDD
Programando com prazer com DDD
Giovanni Bassi
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
Douglas Siviotti
 
xDD
xDDxDD
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
 
QA e BDD - A TI careta esta morta?
QA e BDD - A TI careta esta morta?QA e BDD - A TI careta esta morta?
QA e BDD - A TI careta esta morta?
Aryadnne Zanatta, SMC,CTFL, SFC
 
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
 
Domain driven-design
Domain driven-designDomain driven-design
Domain driven-design
Maicon Carlos Pereira
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
Jonatas Saraiva
 
[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...
[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...
[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...
Andrelise Rafael Gonçalves
 
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
 
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 - Uma introdução
Domain Driven Design - Uma introduçãoDomain Driven Design - Uma introdução
Domain Driven Design - Uma introdução
Daniel Baptista Dias
 
DDD
DDDDDD
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
Carolina Karklis
 

Semelhante a Domain-Driven-Design (20)

Como fazer-os-recrutadores-implorarem-para-te-contratar
Como fazer-os-recrutadores-implorarem-para-te-contratarComo fazer-os-recrutadores-implorarem-para-te-contratar
Como fazer-os-recrutadores-implorarem-para-te-contratar
 
clean code
clean codeclean code
clean code
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
 
DDD in PHP
DDD in PHPDDD in PHP
DDD in PHP
 
Scrum na sua Empresa
Scrum na sua EmpresaScrum na sua Empresa
Scrum na sua Empresa
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
Programando com prazer com DDD
Programando com prazer com DDDProgramando com prazer com DDD
Programando com prazer com DDD
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
xDD
xDDxDD
xDD
 
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çã...
 
QA e BDD - A TI careta esta morta?
QA e BDD - A TI careta esta morta?QA e BDD - A TI careta esta morta?
QA e BDD - A TI careta esta morta?
 
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...
 
Domain driven-design
Domain driven-designDomain driven-design
Domain driven-design
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...
[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...
[GDG Quality Fest 2017] BDD - Como quebrar as barreiras de negócio dentro do ...
 
Introdução a Domain-Driven Design
Introdução a Domain-Driven DesignIntrodução a Domain-Driven Design
Introdução a 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!
 
Domain Driven Design - Uma introdução
Domain Driven Design - Uma introduçãoDomain Driven Design - Uma introdução
Domain Driven Design - Uma introdução
 
DDD
DDDDDD
DDD
 
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
 

Mais de Wende Mendes

Rotas com angular
Rotas com angularRotas com angular
Rotas com angular
Wende Mendes
 
Angular Nodejs e com mongolab
Angular Nodejs e com mongolabAngular Nodejs e com mongolab
Angular Nodejs e com mongolab
Wende Mendes
 
Dicas para pescar tucunare
Dicas para pescar tucunareDicas para pescar tucunare
Dicas para pescar tucunare
Wende Mendes
 
Produtividade com teste de integracao
Produtividade com teste de integracaoProdutividade com teste de integracao
Produtividade com teste de integracao
Wende Mendes
 
Táticas para motivar a sus equipe
Táticas para motivar a sus equipeTáticas para motivar a sus equipe
Táticas para motivar a sus equipe
Wende Mendes
 
Apreenda a trabalhar em equipe
Apreenda a trabalhar em equipeApreenda a trabalhar em equipe
Apreenda a trabalhar em equipe
Wende Mendes
 
Pare de dar descupas a voce mesmo e aproveite a vida
Pare de dar descupas a voce mesmo e aproveite a vidaPare de dar descupas a voce mesmo e aproveite a vida
Pare de dar descupas a voce mesmo e aproveite a vida
Wende Mendes
 
Aprenda com o simples
Aprenda com o simples Aprenda com o simples
Aprenda com o simples
Wende Mendes
 
Motivação e Metas para Equipe
Motivação e Metas para EquipeMotivação e Metas para Equipe
Motivação e Metas para Equipe
Wende Mendes
 
Uma breve introdução de play framework
Uma breve introdução de play frameworkUma breve introdução de play framework
Uma breve introdução de play framework
Wende Mendes
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
Wende Mendes
 
100 maneiras de motivar sua equipe parte 1
100 maneiras de motivar sua equipe parte 1100 maneiras de motivar sua equipe parte 1
100 maneiras de motivar sua equipe parte 1
Wende Mendes
 
Como aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipe
Wende Mendes
 
Apresentação de Ruby para desktop, xml, yaml, e testes unitários
Apresentação de Ruby para desktop, xml, yaml, e testes unitáriosApresentação de Ruby para desktop, xml, yaml, e testes unitários
Apresentação de Ruby para desktop, xml, yaml, e testes unitários
Wende Mendes
 
Apresentação de ruby parte 5
Apresentação de ruby parte 5Apresentação de ruby parte 5
Apresentação de ruby parte 5
Wende Mendes
 
Apresentação de ruby com blocos de programação, módulos e outros exemplos
Apresentação de ruby com blocos de programação, módulos e outros exemplosApresentação de ruby com blocos de programação, módulos e outros exemplos
Apresentação de ruby com blocos de programação, módulos e outros exemplos
Wende Mendes
 
Ruby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisRuby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito mais
Wende Mendes
 
Ruby com Objetos e classes
Ruby com Objetos e classesRuby com Objetos e classes
Ruby com Objetos e classes
Wende Mendes
 
Introdução a ruby
Introdução a rubyIntrodução a ruby
Introdução a ruby
Wende Mendes
 
Javaone2010
Javaone2010Javaone2010
Javaone2010
Wende Mendes
 

Mais de Wende Mendes (20)

Rotas com angular
Rotas com angularRotas com angular
Rotas com angular
 
Angular Nodejs e com mongolab
Angular Nodejs e com mongolabAngular Nodejs e com mongolab
Angular Nodejs e com mongolab
 
Dicas para pescar tucunare
Dicas para pescar tucunareDicas para pescar tucunare
Dicas para pescar tucunare
 
Produtividade com teste de integracao
Produtividade com teste de integracaoProdutividade com teste de integracao
Produtividade com teste de integracao
 
Táticas para motivar a sus equipe
Táticas para motivar a sus equipeTáticas para motivar a sus equipe
Táticas para motivar a sus equipe
 
Apreenda a trabalhar em equipe
Apreenda a trabalhar em equipeApreenda a trabalhar em equipe
Apreenda a trabalhar em equipe
 
Pare de dar descupas a voce mesmo e aproveite a vida
Pare de dar descupas a voce mesmo e aproveite a vidaPare de dar descupas a voce mesmo e aproveite a vida
Pare de dar descupas a voce mesmo e aproveite a vida
 
Aprenda com o simples
Aprenda com o simples Aprenda com o simples
Aprenda com o simples
 
Motivação e Metas para Equipe
Motivação e Metas para EquipeMotivação e Metas para Equipe
Motivação e Metas para Equipe
 
Uma breve introdução de play framework
Uma breve introdução de play frameworkUma breve introdução de play framework
Uma breve introdução de play framework
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
100 maneiras de motivar sua equipe parte 1
100 maneiras de motivar sua equipe parte 1100 maneiras de motivar sua equipe parte 1
100 maneiras de motivar sua equipe parte 1
 
Como aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipe
 
Apresentação de Ruby para desktop, xml, yaml, e testes unitários
Apresentação de Ruby para desktop, xml, yaml, e testes unitáriosApresentação de Ruby para desktop, xml, yaml, e testes unitários
Apresentação de Ruby para desktop, xml, yaml, e testes unitários
 
Apresentação de ruby parte 5
Apresentação de ruby parte 5Apresentação de ruby parte 5
Apresentação de ruby parte 5
 
Apresentação de ruby com blocos de programação, módulos e outros exemplos
Apresentação de ruby com blocos de programação, módulos e outros exemplosApresentação de ruby com blocos de programação, módulos e outros exemplos
Apresentação de ruby com blocos de programação, módulos e outros exemplos
 
Ruby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisRuby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito mais
 
Ruby com Objetos e classes
Ruby com Objetos e classesRuby com Objetos e classes
Ruby com Objetos e classes
 
Introdução a ruby
Introdução a rubyIntrodução a ruby
Introdução a ruby
 
Javaone2010
Javaone2010Javaone2010
Javaone2010
 

Domain-Driven-Design