Your SlideShare is downloading. ×
Sérgio Lopes
sergio.lopes@caelum.com.br
Domain-Driven Design
Domain-Driven Design
Domain
?
?
Domain
Domain
Problema real
Negócio complicado



      Domain
Problema real
Negócio complicado
                Pessoas reais

      Domain
Problema real
Negócio complicado
                  Pessoas reais

      Domain
Problema real
                Palavriado do negócio
CONVERSA
CONVERSA
Sobre o domínio
CONVERSA
  Sobre o domínio
Para criar um sistema
CONVERSA
  Sobre o domínio
Para criar um sistema
Precisamos falar a mesma língua!



       CONVERSA
        Sobre o domínio
      Para criar um sistema
Língua Ubíqua
  (Ubiquitous Language)
E aí
programador!
 Tudo beleza?
Temos alguns
lagos aqui na fazenda
com vários peixes
    diferentes...
Nosso cliente
chega na loja e usará o sistema
para buscar os melhores
      peixes para ele.
Por exemplo,
  temos peixes aqui de
várias cores. O cliente vai
querer escolher uma cor que
  combine melhor com seu
     ...
Por exemplo,
  temos peixes aqui de
várias cores. O cliente vai
querer escolher uma cor que
  combine melhor com seu
     ...
O cliente
 normalmente também
quer escolher a espécie
 (uma carpa, uma tilápia,
   etc)
Peixe
 - cor
-espécie
Peixe
         - cor
 Cor    -espécie
-nome
Peixe
         - cor
 Cor    -espécie      Espécie
-nome              (Tilápia, Lambari,
                        Carpa, .....
Isso! E nossos
peixes ainda recebem
um nome e um código
  de identificação.
Isso! E nossos
peixes ainda recebem
um nome e um código
  de identificação.
Peixe
           - id
         - nome
          - cor
 Cor    -espécie      Espécie
-nome              (Tilápia, Lambari,
...
Mas nosso cliente geralmente
vai estar interessado em buscar
  apenas por cor e espécie...
Mas nosso cliente geralmente
vai estar interessado em buscar
  apenas por cor e espécie...
Ótimo!
É isso mesmo!
Peixe
           - id
         - nome
          - cor
 Cor    -espécie      Espécie
-nome              (Tilápia, Lambari,
...
Repositório
         de Peixes




           Peixe
            - id
          - nome
           - cor
 Cor     -espécie  ...
Repositório
         de Peixes

                    buscarPorCor
                    buscarPorEspécie


           Peixe
 ...
E, viu, outro tipo de
  busca que normalmente quero
saber é, dado um peixe, dizer quais
  são os peixes irmãos dele, os da...
E, viu, outro tipo de
  busca que normalmente quero
saber é, dado um peixe, dizer quais
  são os peixes irmãos dele, os da...
Acho que
 usando nosso
repositório fica bem
    fácil de saber né?
Repositório
         de Peixes

                    buscarPorCor
                    buscarPorEspécie


           Peixe
 ...
Codificar!
public class Peixe {

	   private Long id;
	   private String nome;

	   private Especie especie;
	   private Cor cor;

}
public enum Especie {
	 TILÁPIA, CARPA, LAMBARI, TRAÍRA;
}

public class Cor {

	   private String nome;

	   public Cor(S...
Repositório... BD? DAO?
 O que o cliente quer?
public interface PeixeRepository {
	 List<Peixe> getTodosOsPeixes();

	   List<Peixe> getPeixesDeCor(Cor cor);

	   List<P...
// quero saber os irmaos do Peixe

public class Peixe {

     // .....

	   private PeixeRepository peixeRepository;

	   ...
UI Layer
 Application Layer
   Domain Layer
Infrastructure Layer
UI Layer
 Application Layer
   Domain Layer
Infrastructure Layer
Ei, programador!!
O sistema tá ficando muito
   bom mesmo hein!
Ei, programador!!
O sistema tá ficando muito
   bom mesmo hein!
Mas eu esqueci um
 negócio: os clientes aqui, quando
compram seus peixes, também
 querem saber se os peixes podem
    vive...
Mas eu esqueci um
 negócio: oséclientes aqui, quando
   A regra bem simples: para
compram seus peixes, podem viver
 os nos...
A regra é bem simples: para
os nossos peixes, só podem viver
juntos se forem da mesma espécie.
  Seria legal verificarmos ...
Model



Código
Model



Código
public class Peixe {

	   // ...
	
	   public boolean podeViverCom(Peixe outroPeixe) {
	   	 return this.especie.equals(ou...
Domain-Driven Design
• Voltado (driven) totalmente ao problema a
  ser resolvido (domain)
• Ubiquitous Language
• Funciona...
Domain-Driven Design


• Não detalhei os patterns
• Podia ter usado framework mais decente
• Podia ter usado Inversão de c...
Não importa a
 tecnologia. O que
importa é o domain.
Obrigado!

Sérgio Lopes
sergio.lopes@caelum.com.br
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Domain Driven Design - Sergio Lopes - Falando em Java 2008
Upcoming SlideShare
Loading in...5
×

Domain Driven Design - Sergio Lopes - Falando em Java 2008

1,438

Published on

Palestra do Sérgio Lopes no evento Falando em Java 2008

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,438
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 1 min
  • 30 SEG
    Tudo comecou em uma bela fazenda muito distante daqui.
    START
    L&amp;#xE1; moram o Cachorro, o Sapo, o Peixe, bla bla
    Um belo dia, o cachorro resolveu abrir um negocio. E para isso, precisava de um sistema.

  • 30 seg
    E ele veio conversar com a equipe tecnica!

    CACHORRO: &amp;#x201C;Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.&amp;#x201D;

  • 30 seg
    E ele veio conversar com a equipe tecnica!

    CACHORRO: &amp;#x201C;Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.&amp;#x201D;

  • 30 seg
    E ele veio conversar com a equipe tecnica!

    CACHORRO: &amp;#x201C;Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.&amp;#x201D;

  • 15 seg
  • 30 seg
  • 30 seg
  • 30 seg
  • 30 seg

    CACHORRO: &amp;#x201C;Temos lambaris, carpas, tambaquis, tilapias e outros cicl&amp;#xED;deos&amp;#x201D;

  • 30 seg

    CACHORRO: &amp;#x201C;Temos lambaris, carpas, tambaquis, tilapias e outros cicl&amp;#xED;deos&amp;#x201D;

  • 30 seg

    PROGRAMADOR: &amp;#x201C;Humm, se fizermos a TilapiaVO estender de AbstractCiclideo, acho que d&amp;#xE1;&amp;#x201D;

  • 30 seg

    PROGRAMADOR: &amp;#x201C;Humm, se fizermos a TilapiaVO estender de AbstractCiclideo, acho que d&amp;#xE1;&amp;#x201D;

  • TODO Revisar esse texto
    1 min
  • TODO Revisar esse texto
    1 min
  • TODO Revisar esse texto
    1 min
  • TODO Revisar esse texto
    1 min
  • - tenho pessoas do dominio e pessoas tecnicas conversando
    - elas PRECISAM conversar
  • - tenho pessoas do dominio e pessoas tecnicas conversando
    - elas PRECISAM conversar
  • - Precisam se entender, &amp;#xE9; necessaria uma lingua comum!

  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model

  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model




  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model

  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model



  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model
  • TODO cachorro falando mudo
    di&amp;#xE1;logo todo at&amp;#xE9; primeiro model




  • repository eh domain
    DAO eh ORM

  • citar IoC
    &amp;#x201C;e como implemento o repositorio? sei la, isso nao eh domain layer, eh infra&amp;#x201D;

  • mostrar rodando no browser
    falar do struts






  • qualquer mudanca no model se reflete no codigo
  • qualquer mudanca no codigo tbm se reflete no model!

    model e codigo andam juntos, tem que refletir a mesma coisa





  • Transcript of "Domain Driven Design - Sergio Lopes - Falando em Java 2008"

    1. 1. Sérgio Lopes sergio.lopes@caelum.com.br
    2. 2. Domain-Driven Design
    3. 3. Domain-Driven Design
    4. 4. Domain
    5. 5. ?
    6. 6. ?
    7. 7. Domain
    8. 8. Domain Problema real
    9. 9. Negócio complicado Domain Problema real
    10. 10. Negócio complicado Pessoas reais Domain Problema real
    11. 11. Negócio complicado Pessoas reais Domain Problema real Palavriado do negócio
    12. 12. CONVERSA
    13. 13. CONVERSA Sobre o domínio
    14. 14. CONVERSA Sobre o domínio Para criar um sistema
    15. 15. CONVERSA Sobre o domínio Para criar um sistema
    16. 16. Precisamos falar a mesma língua! CONVERSA Sobre o domínio Para criar um sistema
    17. 17. Língua Ubíqua (Ubiquitous Language)
    18. 18. E aí programador! Tudo beleza?
    19. 19. Temos alguns lagos aqui na fazenda com vários peixes diferentes...
    20. 20. Nosso cliente chega na loja e usará o sistema para buscar os melhores peixes para ele.
    21. 21. Por exemplo, temos peixes aqui de várias cores. O cliente vai querer escolher uma cor que combine melhor com seu aquário e sua casa.
    22. 22. Por exemplo, temos peixes aqui de várias cores. O cliente vai querer escolher uma cor que combine melhor com seu aquário e sua casa.
    23. 23. O cliente normalmente também quer escolher a espécie (uma carpa, uma tilápia, etc)
    24. 24. Peixe - cor -espécie
    25. 25. Peixe - cor Cor -espécie -nome
    26. 26. Peixe - cor Cor -espécie Espécie -nome (Tilápia, Lambari, Carpa, ...)
    27. 27. Isso! E nossos peixes ainda recebem um nome e um código de identificação.
    28. 28. Isso! E nossos peixes ainda recebem um nome e um código de identificação.
    29. 29. Peixe - id - nome - cor Cor -espécie Espécie -nome (Tilápia, Lambari, Carpa, ...)
    30. 30. Mas nosso cliente geralmente vai estar interessado em buscar apenas por cor e espécie...
    31. 31. Mas nosso cliente geralmente vai estar interessado em buscar apenas por cor e espécie...
    32. 32. Ótimo! É isso mesmo!
    33. 33. Peixe - id - nome - cor Cor -espécie Espécie -nome (Tilápia, Lambari, Carpa, ...)
    34. 34. Repositório de Peixes Peixe - id - nome - cor Cor -espécie Espécie -nome (Tilápia, Lambari, Carpa, ...)
    35. 35. Repositório de Peixes buscarPorCor buscarPorEspécie Peixe - id - nome - cor Cor -espécie Espécie -nome (Tilápia, Lambari, Carpa, ...)
    36. 36. E, viu, outro tipo de busca que normalmente quero saber é, dado um peixe, dizer quais são os peixes irmãos dele, os da mesma espécie.
    37. 37. E, viu, outro tipo de busca que normalmente quero saber é, dado um peixe, dizer quais são os peixes irmãos dele, os da mesma espécie.
    38. 38. Acho que usando nosso repositório fica bem fácil de saber né?
    39. 39. Repositório de Peixes buscarPorCor buscarPorEspécie Peixe - id - nome - cor Cor -espécie Espécie -nome - irmãos (Tilápia, Lambari, Carpa, ...)
    40. 40. Codificar!
    41. 41. public class Peixe { private Long id; private String nome; private Especie especie; private Cor cor; }
    42. 42. public enum Especie { TILÁPIA, CARPA, LAMBARI, TRAÍRA; } public class Cor { private String nome; public Cor(String cor) { this.nome = cor; } public String getNome() { return this.nome; } @Override public String toString() { return this.nome; } }
    43. 43. Repositório... BD? DAO? O que o cliente quer?
    44. 44. public interface PeixeRepository { List<Peixe> getTodosOsPeixes(); List<Peixe> getPeixesDeCor(Cor cor); List<Peixe> getPeixesDaEspecie(Especie especie); Peixe getPeixePeloId(Long id); }
    45. 45. // quero saber os irmaos do Peixe public class Peixe { // ..... private PeixeRepository peixeRepository; public void setPeixeRepository(PeixeRepository peixeRepository) { this.peixeRepository = peixeRepository; } public List<Peixe> getPeixesIrmaos() { return this.peixeRepository.getPeixesDaEspecie(this.especie); } }
    46. 46. UI Layer Application Layer Domain Layer Infrastructure Layer
    47. 47. UI Layer Application Layer Domain Layer Infrastructure Layer
    48. 48. Ei, programador!! O sistema tá ficando muito bom mesmo hein!
    49. 49. Ei, programador!! O sistema tá ficando muito bom mesmo hein!
    50. 50. Mas eu esqueci um negócio: os clientes aqui, quando compram seus peixes, também querem saber se os peixes podem viver no mesmo aquário
    51. 51. Mas eu esqueci um negócio: oséclientes aqui, quando A regra bem simples: para compram seus peixes, podem viver os nossos peixes, só também juntos se forem da mesma espécie. querem saber se os peixes podem Seria legal verificarmos isso viver no mesmo aquário
    52. 52. A regra é bem simples: para os nossos peixes, só podem viver juntos se forem da mesma espécie. Seria legal verificarmos isso
    53. 53. Model Código
    54. 54. Model Código
    55. 55. public class Peixe { // ... public boolean podeViverCom(Peixe outroPeixe) { return this.especie.equals(outroPeixe.especie); } }
    56. 56. Domain-Driven Design • Voltado (driven) totalmente ao problema a ser resolvido (domain) • Ubiquitous Language • Funciona muito bem com Agile • Modelos ricos (não anêmicos) • Nomes importam! • Patterns: Entity,Value Object, Repository, Aggregate, Module, Service
    57. 57. Domain-Driven Design • Não detalhei os patterns • Podia ter usado framework mais decente • Podia ter usado Inversão de controle
    58. 58. Não importa a tecnologia. O que importa é o domain.
    59. 59. Obrigado! Sérgio Lopes sergio.lopes@caelum.com.br

    ×