SlideShare uma empresa Scribd logo
1 de 65
Baixar para ler offline
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

Destaque

Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvcleopp
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelRyan Padilha
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 

Destaque (8)

Domain driven design - Visão Geral
Domain driven design - Visão GeralDomain driven design - Visão Geral
Domain driven design - Visão Geral
 
Arquitetura de Sofware
Arquitetura de SofwareArquitetura de Sofware
Arquitetura de Sofware
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 

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-contratarKleber Carvalho
 
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 GomesiMasters
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com PythonFrederico Cabral
 
Programando com prazer com DDD
Programando com prazer com DDDProgramando com prazer com DDD
Programando com prazer com DDDGiovanni Bassi
 
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
 
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
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignJonatas 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
 
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çãoDaniel Baptista Dias
 
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
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Paulo Victor Gomes
 

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
 
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
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014
 

Mais de Wende Mendes

Angular Nodejs e com mongolab
Angular Nodejs e com mongolabAngular Nodejs e com mongolab
Angular Nodejs e com mongolabWende Mendes
 
Dicas para pescar tucunare
Dicas para pescar tucunareDicas para pescar tucunare
Dicas para pescar tucunareWende Mendes
 
Produtividade com teste de integracao
Produtividade com teste de integracaoProdutividade com teste de integracao
Produtividade com teste de integracaoWende 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 equipeWende Mendes
 
Apreenda a trabalhar em equipe
Apreenda a trabalhar em equipeApreenda a trabalhar em equipe
Apreenda a trabalhar em equipeWende 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 vidaWende 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 EquipeWende 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 frameworkWende Mendes
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e DependênciasWende 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 1Wende Mendes
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-DesignWende 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 equipeWende 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áriosWende Mendes
 
Apresentação de ruby parte 5
Apresentação de ruby parte 5Apresentação de ruby parte 5
Apresentação de ruby parte 5Wende 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 exemplosWende 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 maisWende Mendes
 
Ruby com Objetos e classes
Ruby com Objetos e classesRuby com Objetos e classes
Ruby com Objetos e classesWende Mendes
 
Introdução a ruby
Introdução a rubyIntrodução a ruby
Introdução a rubyWende 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
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
 
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
 

Domain-Driven-Design