(In Portuguese) Workshop de Domain-Driven Design

3,218 views
3,079 views

Published on

Slides utilizados nas turmas do workshop de Domain-Driven Design da Caelum ( http://www.caelum.com.br/curso/ws-46-domain-driven-design/ )

WS-46 | Domain-Driven Design

A idéia é cobrir os principais aspectos desta filosofia de design de uma maneira descontraída mas substancial. O que Domain-Driven Design traz de volta é a possibilidade de utilizar as vantagens da Orientação a Objetos para criamos um modelo que reflita o mundo real de maneira mais íntima. Você não precisa sequer de objetos para aplicar o coração de Domain-Driven Design, ou mesmo seus Patterns.

Neste contexto, DDD é programar para o domínio. Quando você usa esta técnica, seu software (sua camada de negócios, quase sempre) reflete o conhecimento do domínio do seu usário, você modela os conceitos do problema de uma maneira clara no software.

Ao invés de simplesmente criar estruturas de dados e algoritmos, você implementa conceitos e através deles cria um entendimento muito maior sobre o que seu sistema faz para seus usuários, você e para quem for ler seu programa.

Published in: Technology, Business

(In Portuguese) Workshop de Domain-Driven Design

  1. 1. Domain-Driven Design Workshop 2009 http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  2. 2. Modelando http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  3. 3. Notação Classe Classe atributo A atributo A operação B operação B Classe Classe atributo A atributo A operação B operação B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  4. 4. Modelando • Aplicação Web • Utilizando cartões CRC-like • Da Interface até a base de dados/infra- estrutura • Apenas para fins didáticos - não façam isso em casa http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  5. 5. Como um Atendente, Eu quero registrar a entrada em um estacionamento, Para que possa cobrar pelo tempo utilizado http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  6. 6. Como um Atendente, Eu quero registrar a saída do estacionamento, Para que possa cobrar pelo tempo utilizado http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  7. 7. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  8. 8. Parte I: Decisões http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  9. 9. Problema: http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  10. 10. Problema: Como um Usuário, Eu quero me cadastrar no site sistema, Para que possa utilizá-lo http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  11. 11. Reflexão http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  12. 12. Decisão em Três Níveis Qual? Como? http://fragmental.tw O Quê? http://blog.fragmental.com.br http://www.caelum.com.br
  13. 13. Qual material? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  14. 14. Qual material? nçõ es Fu Proc Ob edim jet ento os s http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  15. 15. Como eles colaboram? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  16. 16. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  17. 17. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  18. 18. Como Tabelas? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  19. 19. Como Procedimentos? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  20. 20. Como Uma Sociedade? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  21. 21. Reflexão http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  22. 22. O que são estes objetos? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  23. 23. O que são estes objetos? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  24. 24. Mais Cartões http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  25. 25. Como um Atendente, Eu quero indicar a vaga mais apropriada para meu cliente, Para que possa otimizar a distribuição de carros http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  26. 26. Como um Atendente, Eu quero ver um relógio marcando o tempo que o cliente está estacionado, Para que eu tome decisões rapidamente http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  27. 27. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  28. 28. Camadas? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  29. 29. Mudança
  30. 30. Mudança
  31. 31. Mudança
  32. 32. Mudança
  33. 33. Mudança
  34. 34. Mudança
  35. 35. Mudança
  36. 36. Mudança
  37. 37. Mudança
  38. 38. Mudança
  39. 39. Mudança
  40. 40. Mudança
  41. 41. Apresentação Aplicação Negócios Infra-Estrutura
  42. 42. Domain-Driven Design
  43. 43. Identificando Camadas http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  44. 44. Identificando Camadas • Separe as classes do modelo em suas respectivas Camadas • Refatore, se necessário http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  45. 45. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  46. 46. Parte II: Linguagem http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  47. 47. * B C A { D http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  48. 48. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  49. 49. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  50. 50. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  51. 51. Ruído http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  52. 52. Como um Usuário, Eu quero me cadastrar no site sistema, Para que possa utilizá-lo http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  53. 53. Como um Usuário, Eu quero me cadastrar no site sistema, Para que possa utilizá-lo Ruído http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  54. 54. Ruído Sintático Como um Usuário, Eu quero me cadastrar no site sistema, Para que possa utilizá-lo http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  55. 55. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  56. 56. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  57. 57. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  58. 58. Ruído http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  59. 59. Ruído Semântico http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  60. 60. Reflexão http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  61. 61. Ruído Sintático Ruído Semântico http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  62. 62. Ruído Sintático Ruído Semântico } Domain-Driven Design http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  63. 63. } Ruído Sintático Domain-Specific Languages Ruído Semântico http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  64. 64. Ruído Semântico } Domain-Driven Design http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  65. 65. Técnico Negócios Reserva Herança Vaga Composição Manutenção Objeto Classe Ocupante Thread DAO Carro Funcionário Framework Manutenção Teste Unitário Imposto Conta Segurança Moto Patterns Gerente http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  66. 66. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  67. 67. Negócios Técnico http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  68. 68. Técnico Negócios Linguagem http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  69. 69. Obrigado Até a próxima! http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  70. 70. Identificando Ruído http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  71. 71. Identificando Ruído • Identifique o que no Modelo faz parte do domínio técnico e de negócios • Escreva um esboço do que seria a Linguagem deste domínio http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  72. 72. Como um Atendente, Eu quero registrar a entrada em um estacionamento, Para que possa cobrar pelo tempo utilizado http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  73. 73. Como um Atendente, Eu quero registrar a saída do estacionamento, Para que possa cobrar pelo tempo utilizado http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  74. 74. Como um Atendente, Eu quero indicar a vaga mais apropriada para meu cliente, Para que possa otimizar a distribuição de carros http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  75. 75. Como um Atendente, Eu quero ver um relógio marcando o tempo que o cliente está estacionado, Para que eu tome decisões rapidamente http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  76. 76. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  77. 77. Parte III: Base http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  78. 78. Nomeando Bovinos http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  79. 79. Objetos com identidade Entity Objetos definidos por Value Object seu valor Lugar de onde obtemos Repository objetos Interações entre objetos Service em uma dada ordem http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  80. 80. Value Object Saldo A = 100 Saldo B = 10 + 80 + 5 + 5 Saldo C = 90 - 12 + 6 + 6 http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  81. 81. Value Object Data A = 25/12/1983 Data B = Natal de 1983 Data C = 6 dias para 1984 http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  82. 82. Conta Conta Vencimento: 21/02/2008 Valor: R$4.000,00 == Vencimento: 21/02/2008 Valor: R$4.000,00 ? Credor: Casas da Banha Credor: Casas da Banha http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  83. 83. Entity Cliente Serviço Toca Música Recomenda Música http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  84. 84. Entity Cliente Serviço Los Hermanos! http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  85. 85. Entity Cliente Serviço ✓ Los Hermanos! http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  86. 86. Entity Cliente Serviço ✓ Los Hermanos! http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  87. 87. Entity Cliente Serviço ✓ Los Hermanos! Los Hermanos? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  88. 88. Entity Cliente Serviço ✓ ? Los Hermanos! Los Hermanos? http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  89. 89. Entity ✓Identidade ✓Ciclo de Vida http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  90. 90. Entity ✓Identidade Chave Primária Object ID Hashcode Definida pela Linguagem do Domínio http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  91. 91. Service Mensagem Módulo A Módulo B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  92. 92. Service Mensagem ? Módulo A Módulo B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  93. 93. Service Mensagem Roteador Módulo A Módulo B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  94. 94. Service ✓Parte da Linguagem ✓Fluxo de ações sobre outros objetos do domínio ✓Sem estado http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  95. 95. Service Atenção! 92,9245% do que você achar que são Services não são! http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  96. 96. Repository (de onde vêm os bebês?) http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  97. 97. Cliente Repositório http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  98. 98. Cliente Código que Acessa Repositório o Banco de Dados http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  99. 99. Repository ✓Parte da Linguagem ✓Não deixa vazar detalhes de implementação ✓Tenha o menor número possível http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  100. 100. Identificando Padrões http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  101. 101. Identificando Padrões • Marque usando tags os padrões no seu domínio http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  102. 102. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  103. 103. Parte IV: Escalando http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  104. 104. Integrando http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  105. 105. Como um Contador, Eu que as transações sejam gerenciadas pelo meu sistema, Para evitar duplicação de dados http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  106. 106. Sistema Contábil Envolvido Credor Transação Devedor http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  107. 107. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  108. 108. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  109. 109. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  110. 110. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  111. 111. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  112. 112. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  113. 113. A http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  114. 114. A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  115. 115. A B C http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  116. 116. A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  117. 117. A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  118. 118. A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  119. 119. A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  120. 120. A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  121. 121. Mapa A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  122. 122. Desenhando o Mapa http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  123. 123. Desenhando o Mapa • Estabeleça a relação entre os dois domínios em um diagrama http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  124. 124. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  125. 125. Mudanças do Lado de Lá http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  126. 126. Sistema Contábil Envolvido Credor Transação Devedor http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  127. 127. Sistema Contábil Envolvido Credor Transação Devedor http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  128. 128. Sistema Contábil Conta Devedor Transação Credor http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  129. 129. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  130. 130. Anti-Corrupção A B http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  131. 131. Contexts, Map & Anti-Corruption ✓Nomes dos Bounded Contexts são parte da Linguagem ✓Mapa precisa ser executável e verificável ✓Anti-Corruption Layer não faz parte da Linguagem, deve ser abstraída http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  132. 132. O que são “Outros Domínios”? ‣“Pedaços” com linguagem diferente ‣Sistemas legados ‣Bases de dados legadas ‣Serviços remotos ‣Qualquer “pedaço” que você não controle http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  133. 133. Introduza Anti-Corrupção http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  134. 134. Apresentação http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  135. 135. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  136. 136. Conclusão: Melhore sua comunicação. http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  137. 137. Referências http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  138. 138. Créditos de Fotos http://www.flickr.com/photos/ orbitgal bernatcg sykossa januszbc mdumlao98 8471692@N07 beija-flor clarissa londonmummy neilharvey rodrigobertolino niallkennedy aoneill ericeslinger http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  139. 139. http://creativecommons.org/licenses/by-nc-nd/2.5/br/ http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
  140. 140. Como um Usuário, Eu quero consultar minha conta na Internet, Para que possa pagá-la http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br

×