Domain Driven Design - Sergio Lopes - Falando em Java 2008

1,719 views
1,619 views

Published on

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

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

No Downloads
Views
Total views
1,719
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 1 min
  • 30 SEG
    Tudo comecou em uma bela fazenda muito distante daqui.
    START
    Lá 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: “Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.”

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

    CACHORRO: “Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.”

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

    CACHORRO: “Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.”

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

    CACHORRO: “Temos lambaris, carpas, tambaquis, tilapias e outros ciclídeos”

  • 30 seg

    CACHORRO: “Temos lambaris, carpas, tambaquis, tilapias e outros ciclídeos”

  • 30 seg

    PROGRAMADOR: “Humm, se fizermos a TilapiaVO estender de AbstractCiclideo, acho que dá”

  • 30 seg

    PROGRAMADOR: “Humm, se fizermos a TilapiaVO estender de AbstractCiclideo, acho que dá”

  • 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, é necessaria uma lingua comum!

  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model

  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model




  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model

  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model



  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model
  • TODO cachorro falando mudo
    diálogo todo até primeiro model




  • repository eh domain
    DAO eh ORM

  • citar IoC
    “e como implemento o repositorio? sei la, isso nao eh domain layer, eh infra”

  • 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





  • 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

    ×