SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
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/

Mais conteúdo relacionado

Semelhante a Domain driven design

GT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de InterfaceGT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de InterfaceRoberto Beraldo Chaiben
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de softwareAdriano Tavares
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous deliveryMarco Valtas
 
Alta produtividade nAlta produtividade no desenvolvimento corporativo em J2EE
Alta produtividade nAlta produtividade no desenvolvimento corporativo em J2EEAlta produtividade nAlta produtividade no desenvolvimento corporativo em J2EE
Alta produtividade nAlta produtividade no desenvolvimento corporativo em J2EEelliando dias
 
NEC Brasil, T&T Solutions
NEC Brasil, T&T SolutionsNEC Brasil, T&T Solutions
NEC Brasil, T&T Solutionsdavisao
 
Apresentação Cloud Privada
Apresentação Cloud PrivadaApresentação Cloud Privada
Apresentação Cloud PrivadaCarlos Miranda
 
GT-Digital Preservation - Camada de Gerenciamento
GT-Digital Preservation - Camada de GerenciamentoGT-Digital Preservation - Camada de Gerenciamento
GT-Digital Preservation - Camada de GerenciamentoRoberto Beraldo Chaiben
 
Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...
Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...
Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...Manoel Pimentel Medeiros
 
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Javaelliando dias
 
Pax Managed Applications [PMA]
Pax Managed Applications [PMA]Pax Managed Applications [PMA]
Pax Managed Applications [PMA]paxtecnologia
 
Arquitetura de um barramento de Serviços com BizTalk Server – ESB Toolkit
Arquitetura de um barramento de Serviços com BizTalk Server – ESB ToolkitArquitetura de um barramento de Serviços com BizTalk Server – ESB Toolkit
Arquitetura de um barramento de Serviços com BizTalk Server – ESB ToolkitMarkus Christen
 
Demoiselle - Arquitetura
Demoiselle - ArquiteturaDemoiselle - Arquitetura
Demoiselle - ArquiteturaSerge Rehem
 
MS Online Friday - 2ª Sexta
 MS Online Friday - 2ª Sexta MS Online Friday - 2ª Sexta
MS Online Friday - 2ª SextaSara Barbosa
 
Delphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaDelphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaJosé Araújo
 

Semelhante a Domain driven design (20)

GT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de InterfaceGT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de Interface
 
Just java 2011
Just java   2011Just java   2011
Just java 2011
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
 
Conceitos de SOA
Conceitos de SOAConceitos de SOA
Conceitos de SOA
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous delivery
 
Alta produtividade nAlta produtividade no desenvolvimento corporativo em J2EE
Alta produtividade nAlta produtividade no desenvolvimento corporativo em J2EEAlta produtividade nAlta produtividade no desenvolvimento corporativo em J2EE
Alta produtividade nAlta produtividade no desenvolvimento corporativo em J2EE
 
Continuous Delivery e DevOps
Continuous Delivery e DevOpsContinuous Delivery e DevOps
Continuous Delivery e DevOps
 
NEC Brasil, T&T Solutions
NEC Brasil, T&T SolutionsNEC Brasil, T&T Solutions
NEC Brasil, T&T Solutions
 
Apresentação Cloud Privada
Apresentação Cloud PrivadaApresentação Cloud Privada
Apresentação Cloud Privada
 
Aula2 paradigmas
Aula2 paradigmasAula2 paradigmas
Aula2 paradigmas
 
Folder
FolderFolder
Folder
 
GT-Digital Preservation - Camada de Gerenciamento
GT-Digital Preservation - Camada de GerenciamentoGT-Digital Preservation - Camada de Gerenciamento
GT-Digital Preservation - Camada de Gerenciamento
 
Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...
Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...
Roteiro Ágil - Integrando princípios ágeis para a melhoria do desenvolvimento...
 
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
 
Pax Managed Applications [PMA]
Pax Managed Applications [PMA]Pax Managed Applications [PMA]
Pax Managed Applications [PMA]
 
Arquitetura de um barramento de Serviços com BizTalk Server – ESB Toolkit
Arquitetura de um barramento de Serviços com BizTalk Server – ESB ToolkitArquitetura de um barramento de Serviços com BizTalk Server – ESB Toolkit
Arquitetura de um barramento de Serviços com BizTalk Server – ESB Toolkit
 
Demoiselle - Arquitetura
Demoiselle - ArquiteturaDemoiselle - Arquitetura
Demoiselle - Arquitetura
 
Poster 2009 09 24
Poster 2009 09 24Poster 2009 09 24
Poster 2009 09 24
 
MS Online Friday - 2ª Sexta
 MS Online Friday - 2ª Sexta MS Online Friday - 2ª Sexta
MS Online Friday - 2ª Sexta
 
Delphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaDelphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração Contínua
 

Mais de Milfont Consulting (20)

Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!
 
Equipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasEquipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridas
 
Beagajs
BeagajsBeagajs
Beagajs
 
Engine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesEngine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML Sprites
 
MVC Model 3
MVC Model 3MVC Model 3
MVC Model 3
 
Dar caos à ordem
Dar caos à ordemDar caos à ordem
Dar caos à ordem
 
I TDD my jQuery code without Browser
I TDD my jQuery code without BrowserI TDD my jQuery code without Browser
I TDD my jQuery code without Browser
 
Oxente BDD
Oxente BDDOxente BDD
Oxente BDD
 
Construindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e SenchaConstruindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e Sencha
 
Dar Ordem ao Caos
Dar Ordem ao CaosDar Ordem ao Caos
Dar Ordem ao Caos
 
Primeiro Dia Livre Opensocial
Primeiro Dia Livre OpensocialPrimeiro Dia Livre Opensocial
Primeiro Dia Livre Opensocial
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Opensocial
OpensocialOpensocial
Opensocial
 
Frameworks Ajax
Frameworks AjaxFrameworks Ajax
Frameworks Ajax
 
OpenSocial CCT
OpenSocial CCTOpenSocial CCT
OpenSocial CCT
 
Cct Dsl
Cct DslCct Dsl
Cct Dsl
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Ajaxificando
AjaxificandoAjaxificando
Ajaxificando
 
Integração Contínua 3FCSL
Integração Contínua 3FCSLIntegração Contínua 3FCSL
Integração Contínua 3FCSL
 

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
  • 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 language structured around the domain model and used by all team members to connect all the activities of the team with the software."
  • 11. 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
  • 12. 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
  • 13. 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
  • 14.
  • 15.
  • 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...
  • 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 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
  • 25. Shared Kernel shared Translation Map
  • 26. Context Map Translation Model in Context Map Model in Context