Domain Driven Design [DDD]

 Combatendo a complexidade
   no desenvolvimento de
          software


 Christiano Milfont
 Unifor 2010, Fortaleza
 Copyleft 2010 Milfont.org
Requirements



               Design                       Waterfall

                        Implementation



                                         Testing



                                                   Deployment



                                                                Maintenance
Requirements



               Design                       Waterfall

                        Implementation



                                         Testing



                                                   Deployment



                                                                Maintenance
Design
Design
Requirements



               Design                       Waterfall

                        Implementation



                                         Testing



                                                   Deployment



                                                                Maintenance
Test First
Testing




          Requirements



                         Design



                                  Implementation



                                             Deployment



                                                          Maintenance
Test First
Testing




          Requirements



                         Design



                                  Implementation



                                             Deployment



                                                          Maintenance
Test First


             Testing


Design                   Implementation


          Requirements




          Deployment



                       Maintenance
Linguagem Ubíqua

"A language structured
 around the domain
 model and used by all
 team members to
 connect all the
 activities of the team
 with the software."
Um Membro do projeto cadastra uma
  “Issue” no sistema.

Um Gerente de projetos aceita ou
  rejeita a entrada de Issues para
  serem trabalhadas.

Um Funcionário do hospital dá entrada
  do Paciente na Emergência.

O Cenário de entrada por pacientes
   depende do Login do usuário com
   ROLE Admin na Action antes do
   forward.

Um funcionário atende uma solicitação
  de saída de medicamento pelo
  prontuário do paciente com limite do
  cardápio do médico.

A Tabela TB_ITEMS tem ligação com a
   Tabela TB_NOTAS
Um Membro do projeto cadastra uma
  “Issue” no sistema.

Um Gerente de projetos aceita ou
  rejeita a entrada de Issues para
  serem trabalhadas.

Um Funcionário do hospital dá entrada
  do Paciente na Emergência.

O Cenário de entrada por pacientes
   depende do Login do usuário com
   ROLE Admin na Action antes do
   forward.

Um funcionário atende uma solicitação
  de saída de medicamento pelo
  prontuário do paciente com limite do
  cardápio do médico.

A Tabela TB_ITEMS tem ligação com a
   Tabela TB_NOTAS
Um Membro do projeto cadastra uma
  “Issue” no sistema.

Um Gerente de projetos aceita ou
  rejeita a entrada de Issues para
  serem trabalhadas.

Um Funcionário do hospital dá
  entrada do Paciente na
  Emergência.

O Cenário de entrada por pacientes
   depende do Login do usuário com
   ROLE Admin na Action antes do
   forward.

Um funcionário atende uma
  solicitação de saída de
  medicamento pelo prontuário do
  paciente com limite do cardápio do
  médico.

A Tabela TB_ITEMS tem ligação com a
   Tabela TB_NOTAS
LoginAction
                                   Lembra
                                  como voce
          LoginForm
                                   fazia no
                                    Struts?
                      LoginVO



                                LoginBO



                                          LoginDAO



                                                     DATABASE
LoginBean


                             E sua
        LoginVO
                         variação JSF?

              LoginBO


                                           DATABASE
                        Login



                                LoginDAO



                                           GenericDAO
LoginFacade

                                 Agora você é
          LoginService
                                   moderno

                         Login                       DATABASE



                                 LoginRepository




                                               GenericRepository
LoginFacade

                                 Agora você é
          LoginService
                                   moderno

                         Login                       DATABASE



                                 LoginRepository




                                               GenericRepository
Armas não matam
   pessoas...
 Pessoas matam
   pessoas...
Hands on...
access with             REPOSITORIES

                        SERVICES
                                                                                                     access with

                                                                maintain integrity with
                                                ENTITIES
         express model with
                                                                  act as root of
                 express model with
                                                                                           AGGREGATES

                       express model with
MODEL-DRIVEN                                         VALUE OBJECTS
  DESIGN                                                                      encapsulate with

                                                               encapsulate with        encapsulate with
               isolate domain with

       X
mutually exclusive
    choices                           LAYERED              encapsulate with
                                 ARCHITECTURE                                          FACTORIES



    SMART UI
Domain Element              State/Behavior
Entity, Value Object, Aggregate   State and Behavior
       Data Transfer Object           State only
        Service, Repository         Behavior only
keep model unified by
                                                           CONTINUOUS
                                                           INTEGRATION                    SHARED
                                                                                          KERNEL
                      BOUNDED
                      CONTEXT
                                                                                                   CUSTOMER/
   names
                                                                                                    SUPPLIER
    enter                                              overlap allied contexts through
                                                                                                     TEAMS
             assess/overview                                  relate allied contexts as
             relationships with      CONTEXT MAP
                                                             overlap unilaterally as
                                                                                            CONFORMIST

                                                        support multiple
UBIQUITOUS                                               clients through
LANGUAGE                                       free teams to go               OPEN HOST
                                  translate and insulate                       SERVICE        formalize as     PUBLISHED
                                     unilaterally with                                                         LANGUAGE


                                                             SEPARATE
                                                               WAYS
                                  ANTICORRUPTION
                                      LAYER
Shared Kernel



               shared


 Translation
         Map
Context Map

                    Translation
Model in Context           Map



                                  Model in Context
Perguntas?




http://www.milfont.org/tech/2010/05/27/palestra-bdd-unifor-2010/

Domain driven design

  • 1.
    Domain Driven Design[DDD] Combatendo a complexidade no desenvolvimento de software Christiano Milfont Unifor 2010, Fortaleza Copyleft 2010 Milfont.org
  • 2.
    Requirements Design Waterfall Implementation Testing Deployment Maintenance
  • 3.
    Requirements Design Waterfall Implementation Testing Deployment Maintenance
  • 4.
  • 5.
  • 6.
    Requirements Design Waterfall Implementation Testing Deployment Maintenance
  • 7.
    Test First Testing Requirements Design Implementation Deployment Maintenance
  • 8.
    Test First Testing Requirements Design Implementation Deployment Maintenance
  • 9.
    Test First Testing Design Implementation Requirements Deployment Maintenance
  • 10.
    Linguagem Ubíqua "A languagestructured around the domain model and used by all team members to connect all the activities of the team with the software."
  • 11.
    Um Membro doprojeto cadastra uma “Issue” no sistema. Um Gerente de projetos aceita ou rejeita a entrada de Issues para serem trabalhadas. Um Funcionário do hospital dá entrada do Paciente na Emergência. O Cenário de entrada por pacientes depende do Login do usuário com ROLE Admin na Action antes do forward. Um funcionário atende uma solicitação de saída de medicamento pelo prontuário do paciente com limite do cardápio do médico. A Tabela TB_ITEMS tem ligação com a Tabela TB_NOTAS
  • 12.
    Um Membro doprojeto cadastra uma “Issue” no sistema. Um Gerente de projetos aceita ou rejeita a entrada de Issues para serem trabalhadas. Um Funcionário do hospital dá entrada do Paciente na Emergência. O Cenário de entrada por pacientes depende do Login do usuário com ROLE Admin na Action antes do forward. Um funcionário atende uma solicitação de saída de medicamento pelo prontuário do paciente com limite do cardápio do médico. A Tabela TB_ITEMS tem ligação com a Tabela TB_NOTAS
  • 13.
    Um Membro doprojeto cadastra uma “Issue” no sistema. Um Gerente de projetos aceita ou rejeita a entrada de Issues para serem trabalhadas. Um Funcionário do hospital dá entrada do Paciente na Emergência. O Cenário de entrada por pacientes depende do Login do usuário com ROLE Admin na Action antes do forward. Um funcionário atende uma solicitação de saída de medicamento pelo prontuário do paciente com limite do cardápio do médico. A Tabela TB_ITEMS tem ligação com a Tabela TB_NOTAS
  • 16.
    LoginAction Lembra como voce LoginForm fazia no Struts? LoginVO LoginBO LoginDAO DATABASE
  • 17.
    LoginBean E sua LoginVO variação JSF? LoginBO DATABASE Login LoginDAO GenericDAO
  • 18.
    LoginFacade Agora você é LoginService moderno Login DATABASE LoginRepository GenericRepository
  • 19.
    LoginFacade Agora você é LoginService moderno Login DATABASE LoginRepository GenericRepository
  • 20.
    Armas não matam pessoas... Pessoas matam pessoas...
  • 21.
  • 22.
    access with REPOSITORIES SERVICES access with maintain integrity with ENTITIES express model with act as root of express model with AGGREGATES express model with MODEL-DRIVEN VALUE OBJECTS DESIGN encapsulate with encapsulate with encapsulate with isolate domain with X mutually exclusive choices LAYERED encapsulate with ARCHITECTURE FACTORIES SMART UI
  • 23.
    Domain Element State/Behavior Entity, Value Object, Aggregate State and Behavior Data Transfer Object State only Service, Repository Behavior only
  • 24.
    keep model unifiedby CONTINUOUS INTEGRATION SHARED KERNEL BOUNDED CONTEXT CUSTOMER/ names SUPPLIER enter overlap allied contexts through TEAMS assess/overview relate allied contexts as relationships with CONTEXT MAP overlap unilaterally as CONFORMIST support multiple UBIQUITOUS clients through LANGUAGE free teams to go OPEN HOST translate and insulate SERVICE formalize as PUBLISHED unilaterally with LANGUAGE SEPARATE WAYS ANTICORRUPTION LAYER
  • 25.
    Shared Kernel shared Translation Map
  • 26.
    Context Map Translation Model in Context Map Model in Context
  • 27.