SlideShare une entreprise Scribd logo
1  sur  29
Domain Driven
   Design
    Saulo Arruda
O que é

modelar?
http://www.flickr.com/photos/13948040@N07/1419827539/
http://www.flickr.com/photos/library_of_congress/2179863282/sizes/o/
http://www.flickr.com/photos/59274688@N00/161996627/
http://www.flickr.com/photos/nitrum/4425749511/
mo.de.lo
Desenho ou imagem que representa o que se pretende
   reproduzir, desenhando, pintando ou esculpindo.




                      http://michaelis.uol.com.br/moderno/portugues/index.php?lingua=portugues-portugues&palavra=modelo
Linguagem obtusa
• Programadores: Thread, SQL, Array,
  Hibernate, Java, ActiveRecord, String
• Cliente: Fluxo de Caixa, Balancete, Plano de
  Vôo, Produto,Venda, Cliente


           Criar uma linguagem comum:
     a linguagem do domínio do negócio
Modelo de domínio

• O modelo e o coração do design dão
  forma um ao outro;
• O modelo é a espinha dorsal de uma
  linguagem utilizada por todos os membros
  da equipe;
• O modelo é um conhecimento destilado;
Isolando o domínio
Entity

• Objetos com identidade;
• Bons começos para a modelagem;
• A maioria dos objetos do domínio serão
  entities;
• São mutáveis;
Value Objects

• Não possuem identidade;
• Seus atributos o definem;
• Descrevem certos aspectos do domínio;
• É recomendável que sejam imutáveis e por
  isso podem ser compartilhados;
Pessoa                     Pessoa
                      ==                         ?
nome: José da Silva        nome: José da Silva




      Valor                      Valor
   moeda: Real        ==      moeda: Real        ?
   montante: 50               montante: 50
Pessoa                     Pessoa
                      ==                         ?
nome: José da Silva        nome: José da Silva


                  Entity!

      Valor                      Valor
   moeda: Real        ==      moeda: Real        ?
   montante: 50               montante: 50
Pessoa                     Pessoa
                      ==                         ?
nome: José da Silva        nome: José da Silva


                  Entity!

      Valor                      Valor
   moeda: Real        ==      moeda: Real        ?
   montante: 50               montante: 50


        Value Object!
Service

• Representam comportamentos que não se
  encaixam em entities ou value objects;
• Objetos sem estado;
• Suas operações interagem com outros
  objetos do domínio;
Module

• Sistemas crescem e se torna complexo um
  entendimento do todo;
• Módulos agrupam conceitos relacionados;
• Módulos podem se relacionar entre si;
Aggregate

• Usado para refinar as responsabilidades e
  fronteiras dos objetos;
• É um grupo de objetos associados que
  podem ser considerados como uma
  unidade com relação aos dados;
• Um agragate tem apenas uma entidade root;
Telefones
                    salvar()




clienteController                   Cliente
                               salvar()




                       Endereços
                    salvar()
Cliente
                               adicionarEndereco()
clienteController              adicionarTelefone()
                               salvar()




                       Endereços              Telefones
                    salvar()               salvar()
Factory

• Objetos complexos ou trabalhosos para
  serem construídos;
• A construção exige alto conhecimento
  sobre a estrutura interna;
• Factories encapsulam as regras para
  construção de um objeto;
Repository

• Encapsula a lógica para obter os objetos
  de um sistema de persistência;
• Tem acesso à infra-estrutura de
  persistência;
Discussão
Referências


•   InfoQ, Domain Driven Design Quickly

•   Eric Evans, Domain Driven Design – Atacando as
    Complexidades no Coração do Software

Contenu connexe

En vedette

Analista de negócios no mundo agile
Analista de negócios no mundo agileAnalista de negócios no mundo agile
Analista de negócios no mundo agileJefferson Moreira
 
Startups - É programando que se empreende
Startups - É programando que se empreendeStartups - É programando que se empreende
Startups - É programando que se empreendeSaulo Arruda
 
2. Abordagens Ágeis
2. Abordagens Ágeis2. Abordagens Ágeis
2. Abordagens ÁgeisSaulo Arruda
 
IC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesIC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesJefferson Moreira
 
Todo mundo nasce Agil
Todo mundo nasce AgilTodo mundo nasce Agil
Todo mundo nasce AgilSaulo Arruda
 
Growth hacking - Jera Retrospectiva
Growth hacking  - Jera RetrospectivaGrowth hacking  - Jera Retrospectiva
Growth hacking - Jera RetrospectivaSaulo Arruda
 
Oportunidade para desenvolvedores na era das startups
Oportunidade para desenvolvedores na era das startupsOportunidade para desenvolvedores na era das startups
Oportunidade para desenvolvedores na era das startupsSaulo Arruda
 
TDC 2012 - Querem me comprar, e agora?
TDC 2012 - Querem me comprar, e agora?TDC 2012 - Querem me comprar, e agora?
TDC 2012 - Querem me comprar, e agora?Saulo Arruda
 
#CPBR7 - Métricas para startups
#CPBR7 - Métricas para startups#CPBR7 - Métricas para startups
#CPBR7 - Métricas para startupsSaulo Arruda
 
Mande seu chefe pentear macaco
Mande seu chefe pentear macacoMande seu chefe pentear macaco
Mande seu chefe pentear macacoSaulo Arruda
 
Growth Hacking Mobile - BRAPPS 2014
Growth Hacking Mobile - BRAPPS 2014Growth Hacking Mobile - BRAPPS 2014
Growth Hacking Mobile - BRAPPS 2014Saulo Arruda
 
StartupFarm métricas
StartupFarm métricasStartupFarm métricas
StartupFarm métricasSaulo Arruda
 
Desenvolvimento iOS - Aula 6
Desenvolvimento iOS - Aula 6Desenvolvimento iOS - Aula 6
Desenvolvimento iOS - Aula 6Saulo Arruda
 
Desenvolvimento iOS - Aula 5
Desenvolvimento iOS - Aula 5Desenvolvimento iOS - Aula 5
Desenvolvimento iOS - Aula 5Saulo Arruda
 
Empreendedorismo e Desenvolvimento Agil
Empreendedorismo e Desenvolvimento AgilEmpreendedorismo e Desenvolvimento Agil
Empreendedorismo e Desenvolvimento AgilSaulo Arruda
 
Um dia-eu-vou-ser-um-analista
Um dia-eu-vou-ser-um-analistaUm dia-eu-vou-ser-um-analista
Um dia-eu-vou-ser-um-analistaJefferson Moreira
 
MVP: conheça os 2 significados ao criar o seu #cpbr8
MVP: conheça os 2 significados ao criar o seu #cpbr8MVP: conheça os 2 significados ao criar o seu #cpbr8
MVP: conheça os 2 significados ao criar o seu #cpbr8Saulo Arruda
 

En vedette (20)

Analista de negócios no mundo agile
Analista de negócios no mundo agileAnalista de negócios no mundo agile
Analista de negócios no mundo agile
 
Startups - É programando que se empreende
Startups - É programando que se empreendeStartups - É programando que se empreende
Startups - É programando que se empreende
 
2. Abordagens Ágeis
2. Abordagens Ágeis2. Abordagens Ágeis
2. Abordagens Ágeis
 
IC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesIC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas Doentes
 
Todo mundo nasce Agil
Todo mundo nasce AgilTodo mundo nasce Agil
Todo mundo nasce Agil
 
Growth hacking - Jera Retrospectiva
Growth hacking  - Jera RetrospectivaGrowth hacking  - Jera Retrospectiva
Growth hacking - Jera Retrospectiva
 
Oportunidade para desenvolvedores na era das startups
Oportunidade para desenvolvedores na era das startupsOportunidade para desenvolvedores na era das startups
Oportunidade para desenvolvedores na era das startups
 
TDC 2012 - Querem me comprar, e agora?
TDC 2012 - Querem me comprar, e agora?TDC 2012 - Querem me comprar, e agora?
TDC 2012 - Querem me comprar, e agora?
 
#CPBR7 - Métricas para startups
#CPBR7 - Métricas para startups#CPBR7 - Métricas para startups
#CPBR7 - Métricas para startups
 
Mande seu chefe pentear macaco
Mande seu chefe pentear macacoMande seu chefe pentear macaco
Mande seu chefe pentear macaco
 
Growth Hacking Mobile - BRAPPS 2014
Growth Hacking Mobile - BRAPPS 2014Growth Hacking Mobile - BRAPPS 2014
Growth Hacking Mobile - BRAPPS 2014
 
StartupFarm métricas
StartupFarm métricasStartupFarm métricas
StartupFarm métricas
 
Desenvolvimento iOS - Aula 6
Desenvolvimento iOS - Aula 6Desenvolvimento iOS - Aula 6
Desenvolvimento iOS - Aula 6
 
Desenvolvimento iOS - Aula 5
Desenvolvimento iOS - Aula 5Desenvolvimento iOS - Aula 5
Desenvolvimento iOS - Aula 5
 
Manifesto Agil
Manifesto AgilManifesto Agil
Manifesto Agil
 
Empreendedorismo e Desenvolvimento Agil
Empreendedorismo e Desenvolvimento AgilEmpreendedorismo e Desenvolvimento Agil
Empreendedorismo e Desenvolvimento Agil
 
Um dia-eu-vou-ser-um-analista
Um dia-eu-vou-ser-um-analistaUm dia-eu-vou-ser-um-analista
Um dia-eu-vou-ser-um-analista
 
SCRUM - Aula1
SCRUM - Aula1SCRUM - Aula1
SCRUM - Aula1
 
MVP: conheça os 2 significados ao criar o seu #cpbr8
MVP: conheça os 2 significados ao criar o seu #cpbr8MVP: conheça os 2 significados ao criar o seu #cpbr8
MVP: conheça os 2 significados ao criar o seu #cpbr8
 
Rails nas Nuvens
Rails nas NuvensRails nas Nuvens
Rails nas Nuvens
 

Similaire à Modelo de domínio no Domain Driven Design

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
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-DesignWende Mendes
 
Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-DesignWende Mendes
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com PythonFrederico Cabral
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
FEUCTEC 2016 - Hub de eventos com redis
FEUCTEC 2016 - Hub de eventos com redisFEUCTEC 2016 - Hub de eventos com redis
FEUCTEC 2016 - Hub de eventos com redisCharles Lomboni
 

Similaire à Modelo de domínio no Domain Driven Design (10)

Banco de dados 1
Banco de dados 1Banco de dados 1
Banco de dados 1
 
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
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
 
Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
FEUCTEC 2016 - Hub de eventos com redis
FEUCTEC 2016 - Hub de eventos com redisFEUCTEC 2016 - Hub de eventos com redis
FEUCTEC 2016 - Hub de eventos com redis
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 

Plus de Saulo Arruda

Sthart - Desenvolvimento Web e Mobile
Sthart - Desenvolvimento Web e MobileSthart - Desenvolvimento Web e Mobile
Sthart - Desenvolvimento Web e MobileSaulo Arruda
 
Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Saulo Arruda
 
Desenvolvimento iOS - Aula 3
Desenvolvimento iOS - Aula 3Desenvolvimento iOS - Aula 3
Desenvolvimento iOS - Aula 3Saulo Arruda
 
Desenvolvimento iOS - Aula 2
Desenvolvimento iOS - Aula 2Desenvolvimento iOS - Aula 2
Desenvolvimento iOS - Aula 2Saulo Arruda
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
Empreendedorismo Agil
Empreendedorismo AgilEmpreendedorismo Agil
Empreendedorismo AgilSaulo Arruda
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-CSaulo Arruda
 
Aprendendo a errar ou errando para aprender
Aprendendo a errar ou errando para aprenderAprendendo a errar ou errando para aprender
Aprendendo a errar ou errando para aprenderSaulo Arruda
 

Plus de Saulo Arruda (12)

Sthart - Desenvolvimento Web e Mobile
Sthart - Desenvolvimento Web e MobileSthart - Desenvolvimento Web e Mobile
Sthart - Desenvolvimento Web e Mobile
 
SCRUM - Aula 2
SCRUM - Aula 2SCRUM - Aula 2
SCRUM - Aula 2
 
Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4
 
Desenvolvimento iOS - Aula 3
Desenvolvimento iOS - Aula 3Desenvolvimento iOS - Aula 3
Desenvolvimento iOS - Aula 3
 
Desenvolvimento iOS - Aula 2
Desenvolvimento iOS - Aula 2Desenvolvimento iOS - Aula 2
Desenvolvimento iOS - Aula 2
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Empreendedorismo Agil
Empreendedorismo AgilEmpreendedorismo Agil
Empreendedorismo Agil
 
Minicurso Ruby
Minicurso RubyMinicurso Ruby
Minicurso Ruby
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-C
 
Aprendendo a errar ou errando para aprender
Aprendendo a errar ou errando para aprenderAprendendo a errar ou errando para aprender
Aprendendo a errar ou errando para aprender
 
JBoss TRE - Aula1
JBoss TRE - Aula1JBoss TRE - Aula1
JBoss TRE - Aula1
 
6. SCRUM e Kanban
6. SCRUM e Kanban6. SCRUM e Kanban
6. SCRUM e Kanban
 

Modelo de domínio no Domain Driven Design

Notes de l'éditeur