Domain-Driven
                       Design
                       Workshop 2009




http://fragmental.tw    http://blog.f...
Modelando




http://fragmental.tw    http://blog.fragmental.com.br   http://www.caelum.com.br
Notação

       Classe                                            Classe
     atributo A                                  ...
Modelando
     • Aplicação Web
     • Utilizando cartões CRC-like
     • Da Interface até a base de dados/infra-
         ...
Como um Atendente,
           Eu quero registrar a entrada
           em um estacionamento,
           Para que possa cobr...
Como um Atendente,
           Eu quero registrar a saída do
           estacionamento,
           Para que possa cobrar pe...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Parte I: Decisões




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Problema:




http://fragmental.tw     http://blog.fragmental.com.br   http://www.caelum.com.br
Problema:


                Como um Usuário,
                Eu quero me cadastrar no
                site sistema,
      ...
Reflexão


http://fragmental.tw     http://blog.fragmental.com.br   http://www.caelum.com.br
Decisão em Três Níveis

                        Qual?
                       Como?
http://fragmental.tw
                  ...
Qual material?



http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Qual material?
   nçõ  es
Fu
       Proc
Ob          edim
   jet          ento
       os           s
http://fragmental.tw ...
Como
eles
colaboram?
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Como Tabelas?




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Como Procedimentos?




 http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Como Uma Sociedade?




 http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Reflexão


http://fragmental.tw     http://blog.fragmental.com.br   http://www.caelum.com.br
O que são
estes objetos?


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
O que são
estes objetos?


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Mais Cartões




http://fragmental.tw      http://blog.fragmental.com.br   http://www.caelum.com.br
Como um Atendente,
           Eu quero indicar a vaga mais
           apropriada para meu cliente,
           Para que pos...
Como um Atendente,
           Eu quero ver um relógio
           marcando o tempo que o
           cliente está estacionad...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Camadas?

http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Apresentação



  Aplicação



   Negócios



Infra-Estrutura
Domain-Driven
   Design
Identificando Camadas




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Identificando Camadas



     • Separe as classes do modelo em suas
            respectivas Camadas
     • Refatore, se ne...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Parte II: Linguagem




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
*

                       B       C                           A




                                                      ...
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Ruído




 http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Como um Usuário,
Eu quero me cadastrar no site
sistema,
Para que possa utilizá-lo




      http://fragmental.tw      http...
Como um Usuário,
Eu quero me cadastrar no site
sistema,
Para que possa utilizá-lo




Ruído




      http://fragmental.tw...
Ruído Sintático

   Como um Usuário,
   Eu quero me cadastrar no site
   sistema,
   Para que possa utilizá-lo




http://...
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Ruído




 http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Ruído Semântico




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Reflexão


http://fragmental.tw     http://blog.fragmental.com.br   http://www.caelum.com.br
Ruído
Sintático
  Ruído
Semântico




 http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Ruído
Sintático
  Ruído
Semântico               }   Domain-Driven
                            Design




 http://fragmenta...
}
  Ruído
Sintático                                               Domain-Specific
                                        ...
Ruído
Semântico               }               Domain-Driven
                                        Design


 http://fragm...
Técnico                                                    Negócios
                                                      ...
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Negócios




                       Técnico
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Técnico                                     Negócios




                       Linguagem



http://fragmental.tw   http:/...
Obrigado
                       Até a próxima!

http://fragmental.tw       http://blog.fragmental.com.br   http://www.cael...
Identificando Ruído




http://fragmental.tw     http://blog.fragmental.com.br   http://www.caelum.com.br
Identificando Ruído


     • Identifique o que no Modelo faz parte
            do domínio técnico e de negócios
     • Esc...
Como um Atendente,
           Eu quero registrar a entrada
           em um estacionamento,
           Para que possa cobr...
Como um Atendente,
           Eu quero registrar a saída do
           estacionamento,
           Para que possa cobrar pe...
Como um Atendente,
           Eu quero indicar a vaga mais
           apropriada para meu cliente,
           Para que pos...
Como um Atendente,
           Eu quero ver um relógio
           marcando o tempo que o
           cliente está estacionad...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Parte III: Base




http://fragmental.tw       http://blog.fragmental.com.br   http://www.caelum.com.br
Nomeando Bovinos


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Objetos com identidade                                  Entity


     Objetos definidos por
                              ...
Value Object



          Saldo A = 100
          Saldo B = 10 + 80 + 5 + 5
          Saldo C = 90 - 12 + 6 + 6


http://f...
Value Object



          Data A = 25/12/1983
          Data B = Natal de 1983
          Data C = 6 dias para 1984


http:...
Conta                                            Conta
Vencimento: 21/02/2008
Valor: R$4.000,00
                          ...
Entity

                       Cliente                                         Serviço




                       Toca Mús...
Entity

                       Cliente                                   Serviço




Los Hermanos!
http://fragmental.tw   ...
Entity

                       Cliente                                   Serviço




  ✓
Los Hermanos!
http://fragmental.t...
Entity

                       Cliente                                   Serviço




  ✓
Los Hermanos!
http://fragmental.t...
Entity

                       Cliente                                   Serviço




  ✓
Los Hermanos!                    ...
Entity

                       Cliente                                   Serviço




  ✓                                  ...
Entity



                   ✓Identidade
                   ✓Ciclo de Vida

http://fragmental.tw   http://blog.fragmental....
Entity


                       ✓Identidade
     Chave Primária
       Object ID
       Hashcode
     Definida pela
Linguag...
Service
                        Mensagem




             Módulo A                                   Módulo B
http://fragm...
Service
                        Mensagem




                                     ?




             Módulo A             ...
Service
                        Mensagem




                         Roteador




             Módulo A                  ...
Service


✓Parte da Linguagem
✓Fluxo de ações sobre outros
objetos do domínio
✓Sem estado

 http://fragmental.tw   http://...
Service
            Atenção!
           92,9245% do
         que você achar
         que são Services
             não são...
Repository




              (de onde vêm os bebês?)

http://fragmental.tw    http://blog.fragmental.com.br   http://www.c...
Cliente


                         Repositório


  http://fragmental.tw    http://blog.fragmental.com.br   http://www.cael...
Cliente


                                                             Código que Acessa
                         Repositó...
Repository

✓Parte da Linguagem
✓Não deixa vazar detalhes de
implementação
✓Tenha o menor número
possível

 http://fragmen...
Identificando Padrões




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Identificando Padrões



     • Marque usando tags os padrões no seu
            domínio




http://fragmental.tw   http:/...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Parte IV: Escalando




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Integrando




http://fragmental.tw     http://blog.fragmental.com.br   http://www.caelum.com.br
Como um Contador,
           Eu que as transações sejam
           gerenciadas pelo meu
           sistema,
           Par...
Sistema Contábil

                                                                  Envolvido



                         ...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
A


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
A               B


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
A               B                               C


http://fragmental.tw   http://blog.fragmental.com.br       http://www....
A                                             B


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum...
A                                             B


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum...
A                                             B


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum...
A                                             B


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum...
A                                             B


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum...
Mapa


     A                                                  B


http://fragmental.tw   http://blog.fragmental.com.br   ...
Desenhando o Mapa




http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Desenhando o Mapa



     • Estabeleça a relação entre os dois
            domínios em um diagrama




http://fragmental.t...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Mudanças do
                        Lado de Lá




http://fragmental.tw     http://blog.fragmental.com.br   http://www.cae...
Sistema Contábil

                                                                  Envolvido



                         ...
Sistema Contábil

                                                                  Envolvido



                         ...
Sistema Contábil


 Conta                                                   Devedor




Transação                         ...
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Anti-Corrupção




     A                                                 B


http://fragmental.tw   http://blog.fragmenta...
Contexts, Map & Anti-Corruption

✓Nomes dos Bounded Contexts
são parte da Linguagem
✓Mapa precisa ser executável e
verificá...
O que são “Outros
                Domínios”?
‣“Pedaços” com linguagem diferente
‣Sistemas legados
‣Bases de dados legadas
...
Introduza
                       Anti-Corrupção




http://fragmental.tw       http://blog.fragmental.com.br   http://www....
Apresentação


http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
http://fragmental.tw   http://blog.fragmental.com.br   http://www.caelum.com.br
Conclusão:


      Melhore sua
     comunicação.

http://fragmental.tw     http://blog.fragmental.com.br   http://www.cael...
Referências




http://fragmental.tw    http://blog.fragmental.com.br   http://www.caelum.com.br
Créditos de Fotos


http://www.flickr.com/photos/ orbitgal
                                                          bernat...
http://creativecommons.org/licenses/by-nc-nd/2.5/br/


 http://fragmental.tw   http://blog.fragmental.com.br   http://www....
Como um Usuário,
           Eu quero consultar minha
           conta na Internet,
           Para que possa pagá-la




h...
(In Portuguese) Workshop de Domain-Driven Design
(In Portuguese) Workshop de Domain-Driven Design
(In Portuguese) Workshop de Domain-Driven Design
(In Portuguese) Workshop de Domain-Driven Design
Próximos SlideShares
Carregando em…5
×

(In Portuguese) Workshop de Domain-Driven Design

3.273 visualizações

Publicada em

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.

Publicada em: Tecnologia, Negócios

(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

×