SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Uma introdução a

                            Domain Driven Design
                                           Daniel Cukier
                                        danicuki@ime.usp.br

                                            IME-USP



quinta-feira, 26 de fevereiro de 2009
Padrões

        Um padrão é uma regra de três partes que
      expressa a relação entre um certo contexto1, um

                problema  2 e uma solução 3




                                           2

quinta-feira, 26 de fevereiro de 2009
O que é DDD

              ✦      Livro de Eric Evans (2004)
              ✦      Padrões
              ✦      Boas práticas
              ✦      Experiência


                                             3

quinta-feira, 26 de fevereiro de 2009
Foco: Domínio

              ✦      Alinhamento com negócio
              ✦      Isolamento entre domínios
              ✦      Reutilização
              ✦      Mínimo acoplamento
              ✦      Independente de tecnologia


                                              4

quinta-feira, 26 de fevereiro de 2009
DDD


                                A volta da Orientação a Objetos?




                                               5

quinta-feira, 26 de fevereiro de 2009
Padrões no DDD
                     [Contexto.]
                     [Discussão do problema.]
                     Resumo do problema.
                     Discussão da solução.
                     Por esta razão:
                     Resumo da solução.
                     Conseqüências, implementação, exemplos.
                     [Contexto resultante.]6
quinta-feira, 26 de fevereiro de 2009
DDD
                             Colocando o
                                                  Blocos de
                              modelo de
                                                construção do
                             domínio para
                                                   MDD
                              funcionar

                     Refatorando
                   para compreender                Projeto
                   profundamente o               estratégico
                        modelo
                                            7

quinta-feira, 26 de fevereiro de 2009
Colocando o modelo
                   de domínio para
                       funcionar

quinta-feira, 26 de fevereiro de 2009
Linguagem Ubíqua



                                               9

quinta-feira, 26 de fevereiro de 2009
Model Driven Design

                     Domínio

                                                                        guia




                                            Modelo                   Refatoração      Design
                                          Desenvolvedores
                                                                                   Software não serve
                                        perdidos e tecnologia
                                                                                     para o domínio
                                            inadequada
                                                                     aperfeiçoa


                                                                10

quinta-feira, 26 de fevereiro de 2009
Blocos de
                                        Construção do
                                           Model
                                           Driven
                                           Design
quinta-feira, 26 de fevereiro de 2009
Arquitetura em Camadas
                                   Interface
                                   de Usuário



                                   Aplicação




                                   Domínio
                                                     DDD
                                   Infra-estrutura


                                                      12

quinta-feira, 26 de fevereiro de 2009
Entidades




                                            13

quinta-feira, 26 de fevereiro de 2009
Objetos de Valores

              ✦      Pra quem não precisa de identidade
              ✦      Imutáveis
              ✦      Descrevem coisas
              ✦      Ciclo de vida rápido
              ✦      Exemplos: Strings, números, cores


                                                14

quinta-feira, 26 de fevereiro de 2009
Agregados
                                                                     Interface



                                                    Entidade

                                             Agregado
                                        Objeto de              Objeto de
                                                    Entidade
                                         Valor                  Valor



quinta-feira, 26 de fevereiro de 2009
Fábricas


              ✦      Quando construir (Agregados) for complexo
              ✦      Devem ser sempre abstratas
              ✦      Não fazem parte do modelo, mas do domínio



                                           16

quinta-feira, 26 de fevereiro de 2009
Serviços


              1. A operação não faz parte de nenhuma
                 Entidade ou Objeto de Valor
              2. Interface fala a língua do Domínio
              3. Sem estado



                                           17

quinta-feira, 26 de fevereiro de 2009
Módulos
              ✦      Agrupe conceitos do modelo, não código
              ✦      Baixo acoplamento / alta coesão
              ✦      Nomes da Linguagem Ubíqua

                                          Modelo = História
                                        Módulo = Capítulo        Módulo = Capítulo

                                        Módulo = Capítulo        Módulo = Capítulo

                                        Módulo = Capítulo        Módulo = Capítulo
                                                            18

quinta-feira, 26 de fevereiro de 2009
Repositórios

                                                                               Código
                                                              b usca
                                                                               Cliente
                                Repositório
                                                                cria           Entidade
                    Agregados               Agregados
                                             Agregados
                     Agregados
                      Agregados


                                        Entidades
                                                                       mo ve
                       Entidades
                                         Entidades
                                                                  re
                        Entidades
                         Entidades
                                             Entidades


                                                         19

quinta-feira, 26 de fevereiro de 2009
Linguagem                                            Model
                               Ubíqua                                         Driven Design
                                                               exp
                                                                  ress
                                                                      am
                                                                          ode
                                        nomes da                              lo c
                                                                                  omo




                                                                                Módulos
         Serviços
                                        Objetos            Entidades                    acess
                                                                                             o com
                                         Valor
                                                                              antémde
                             enc                                            m
                                                                      sula integrida                    Repositórios
                                ap
                               comsul                             ncapm
                                                                 e co          com
                                                       m la




                                      a
                                                    co psu




                                                                                            ac
                                                      ca




                                                                                                es
                                                   en




                                                                                                 ocs
                                                                                                   om
            Fábricas                               encapsula
                                                     com             Agregados
                                                                         20

quinta-feira, 26 de fevereiro de 2009
Refatorando
                          para compreender
                           profundamente
                              o modelo

quinta-feira, 26 de fevereiro de 2009
Interfaces de Intenção Revelada

                     Eu faço
                 exatamente isso.
                  Não precisa se
                 preocupar como




                                        22

quinta-feira, 26 de fevereiro de 2009
Funções sem Efeitos Colaterais


              ✦      Colocar tudo que for possível em funções,
                     principalmente em cálculos complexos
              ✦      Onde não der, usar Comandos que fazem
                     poucas operações e não retornam objetos do
                     domínio


                                          23

quinta-feira, 26 de fevereiro de 2009
Asserções


              ✦      Testes de unidade
              ✦      Usar facilidades da linguagem
              ✦      Testam o comportamento dos Comandos



                                            24

quinta-feira, 26 de fevereiro de 2009
Linguagem                        Model
                                                                     Driven Design
                                         Ubíqua
                          dese                   expressa
                               n
                           usanhadas              modelo
                                 do             através de



                   Interfaces
                  de Intenção
                   Revelada

                                                torna efeitos
                                cria seguras      colaterais
                                 e simples     explícitos com


                                          Funções
                                        sem Efeitos                   Asserções
                                         Colaterais        torna
                                                        composição
                                                          segura
quinta-feira, 26 de fevereiro de 2009
Projeto Estratégico


                                        26

quinta-feira, 26 de fevereiro de 2009
Contexto Delimitado

                            As células existem porque sua
                        membrana define o que está dentro ou
                         fora e determina o que pode entrar




                                            27

quinta-feira, 26 de fevereiro de 2009
Integração Contínua
                                                           Testes
                                             codificação
                         Novo
                      Elemento do
                        Modelo                               Implementação




                                         ✦ Testes automatizados
                                         ✦ Processo de build automático

                                         ✦ Sincronização diária

                                         ✦ Relatórios
                                                28

quinta-feira, 26 de fevereiro de 2009
Mapa do Contexto


                        Modelo no             Mapa de
                        Contexto                         Modelo no
                                              Tradução
                                                         Contexto




                                                  29

quinta-feira, 26 de fevereiro de 2009
Núcleo Compartilhado


                                        Compartilhado




                                             Mapa de
                                             Tradução



              ✦      É mais difícil fazer mudanças
              ✦      Evita (mas não elimina) duplicações
                                             30

quinta-feira, 26 de fevereiro de 2009
Produtor-Consumidor




              ✦      Testes automatizados
              ✦      Cliente-Fornecedor
                                            31

quinta-feira, 26 de fevereiro de 2009
Conformista

              ✦      Time fornecedor não tem interesse em ajudar
              ✦      Tira complexidade de tradução entre contextos
              ✦      Mesma linguagem ubíqua
              ✦      Parecido com Núcleo Compartilhado, mas
                     cliente não tem poder de modificação


                                             32

quinta-feira, 26 de fevereiro de 2009
Camada Anti-corrupção
                 Seu sistema                Camada Anti-corrupção        Outro Sistema
                         Classe             Serviço         Adaptador    Interface
                        elegante              A                A        complicada



                            Outras coisas     Tradutor 1                          Coisas
                             bem feitas                                        irrelevantes
                                                              Fachada

                                                                          Classe
             Classe cara                       Tradutor 2               bagunçada


            Ok, isso a                      Serviço         Adaptador           Você nem
          gente tem que                       B                B                quer saber
            refatorar
                                                       33

quinta-feira, 26 de fevereiro de 2009
Caminhos Separados


              ✦      Quando integrar custa caro e o benefício é
                     pequeno
              ✦      Contexto delimitado que não tem nenhuma
                     conexão com os outros



                                           34

quinta-feira, 26 de fevereiro de 2009
Resumindo

              1. Trabalhando com um modelo
              2. Blocos de construção
              3. Refatorando e evoluindo
              4. Refinando, destilando


                                            35

quinta-feira, 26 de fevereiro de 2009
quinta-feira, 26 de fevereiro de 2009
Núcleo        Serviço de
                                                                            Linguagem     Contexto       Integração
                            Conformista         Compar-      Hospedagem
                                                                            Publicada     Delimitado      Contínua
                                                 tilhado       Aberto


                   Camada                             Interfaces de                  Model
                                        Contornos                     Linguagem                   Arquitetura   Mapa do
                    Anti-                               Intenção                     Driven
                                        Conceituais                     Ubíqua                    em Camadas    Contexto
                  corrupção                             Revelada                     Design


                            Fechamento Funções sem
       Caminhos                                                Núcleo        Núcleo                      Objetos de
                                de       Efeitos                                           Entidades
       Separados                                               Abstrato     Segregado                     Valores

                                               Isso não é tudo
                             Operações  Colaterais


                    Classes                           Subdomínios     Núcleo do    Mecanismos
                                         Asserções                                                 Serviços     Módulos
                    Isoladas                           Genéricos      Domínio       Coesivos


                              Nível de                       Sentença da
                                                Ordem                        Núcleo
                              Conheci-                        Visão do                    Agregados       Fábricas
                                               que Evolui                   Destacado
                               mento                          Domínio


                                         Arcabouço Camadas de
                                                                       Metáfora
                                        Componente Responsa-                       Repositórios
                                                                      de Sistema
                                          Plugável  bilidade



quinta-feira, 26 de fevereiro de 2009
Referências

              ✦Evans, Eric - Domain Driven Design, Addison-
              Wesley - 2004
              ✦http://www.infoq.com/resource/minibooks/
              domain-driven-design-quickly/en/pdf/
              DomainDrivenDesignQuicklyOnline.pdf


                                             38

quinta-feira, 26 de fevereiro de 2009

Mais conteúdo relacionado

Mais procurados

Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Mauro Leal
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignLambda3
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignJonatas Saraiva
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
O (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwareO (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwarePeter Jandl Junior
 
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TIDNAD
 
Analise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UMLAnalise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UMLRildo (@rildosan) Santos
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLRildo (@rildosan) Santos
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Modelando Sistemas com UML
Modelando Sistemas com UMLModelando Sistemas com UML
Modelando Sistemas com UMLarmeniocardoso
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!Flávio Lisboa
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Adriano Tavares
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareeros.viggiano
 
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
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 
Webinar projetos e ti - business intelligence - como fazer
Webinar   projetos e ti - business intelligence - como fazerWebinar   projetos e ti - business intelligence - como fazer
Webinar projetos e ti - business intelligence - como fazerProjetos e TI
 
Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - AdapterJuliana Cindra
 

Mais procurados (20)

Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven Design
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
O (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwareO (papel do) Arquiteto de Software
O (papel do) Arquiteto de Software
 
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
 
Analise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UMLAnalise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UML
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UML
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Modelando Sistemas com UML
Modelando Sistemas com UMLModelando Sistemas com UML
Modelando Sistemas com UML
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
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
 
DCI com PHP
DCI com PHPDCI com PHP
DCI com PHP
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
Webinar projetos e ti - business intelligence - como fazer
Webinar   projetos e ti - business intelligence - como fazerWebinar   projetos e ti - business intelligence - como fazer
Webinar projetos e ti - business intelligence - como fazer
 
Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - Adapter
 

Semelhante a Introdução ao Domain Driven Design (DDD

Semelhante a Introdução ao Domain Driven Design (DDD (14)

Flisol 2012
Flisol 2012Flisol 2012
Flisol 2012
 
DDD
DDDDDD
DDD
 
Desenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUMDesenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUM
 
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
 
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
 
Amazon Web Services Trends
Amazon Web Services TrendsAmazon Web Services Trends
Amazon Web Services Trends
 
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
 
Es 09
Es 09Es 09
Es 09
 
M2TI - EAIC
M2TI - EAICM2TI - EAIC
M2TI - EAIC
 
2. Abordagens Ágeis
2. Abordagens Ágeis2. Abordagens Ágeis
2. Abordagens Ágeis
 
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDADesenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
 
MVC
MVCMVC
MVC
 
Domain Driven Design : Pensando Fora da Caixa
Domain Driven Design : Pensando Fora da CaixaDomain Driven Design : Pensando Fora da Caixa
Domain Driven Design : Pensando Fora da Caixa
 
Case Usiminas
Case UsiminasCase Usiminas
Case Usiminas
 

Mais de Daniel Cukier

Solidity: Zero to Hero Corporate Training
Solidity: Zero to Hero Corporate TrainingSolidity: Zero to Hero Corporate Training
Solidity: Zero to Hero Corporate TrainingDaniel Cukier
 
Spring e Injeção de Dependência
Spring e Injeção de DependênciaSpring e Injeção de Dependência
Spring e Injeção de DependênciaDaniel Cukier
 
Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...
Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...
Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...Daniel Cukier
 
Startup Communities: From Nascence to Maturity
Startup Communities: From Nascence to MaturityStartup Communities: From Nascence to Maturity
Startup Communities: From Nascence to MaturityDaniel Cukier
 
Technology Startups Ecosystem in China - Lessons to other ecosystems
Technology Startups  Ecosystem in China - Lessons to other ecosystemsTechnology Startups  Ecosystem in China - Lessons to other ecosystems
Technology Startups Ecosystem in China - Lessons to other ecosystemsDaniel Cukier
 
Software Startup Ecosystems Evolution - The New York City Case Study
Software Startup Ecosystems Evolution - The New York City Case StudySoftware Startup Ecosystems Evolution - The New York City Case Study
Software Startup Ecosystems Evolution - The New York City Case StudyDaniel Cukier
 
Maturity model for Startup Ecosystems
Maturity model for Startup EcosystemsMaturity model for Startup Ecosystems
Maturity model for Startup EcosystemsDaniel Cukier
 
Why Google Cloud is so special? Stories from a cloud user
Why Google Cloud is so special?  Stories from a cloud userWhy Google Cloud is so special?  Stories from a cloud user
Why Google Cloud is so special? Stories from a cloud userDaniel Cukier
 
Software Architectures for a Single Person Team
Software Architectures for a Single Person TeamSoftware Architectures for a Single Person Team
Software Architectures for a Single Person TeamDaniel Cukier
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaDaniel Cukier
 
O dia a dia de uma Startup
O dia a dia de uma StartupO dia a dia de uma Startup
O dia a dia de uma StartupDaniel Cukier
 
Injeção de Dependência e Testes com Dublês
Injeção de Dependência e Testes com DublêsInjeção de Dependência e Testes com Dublês
Injeção de Dependência e Testes com DublêsDaniel Cukier
 
Selecting Empirical Methods for Software Engineering
Selecting Empirical Methods for Software EngineeringSelecting Empirical Methods for Software Engineering
Selecting Empirical Methods for Software EngineeringDaniel Cukier
 
Is Computer Science Science?
Is Computer Science Science?Is Computer Science Science?
Is Computer Science Science?Daniel Cukier
 
Better Science Through Art
Better Science Through ArtBetter Science Through Art
Better Science Through ArtDaniel Cukier
 
Designed as Designer
Designed as DesignerDesigned as Designer
Designed as DesignerDaniel Cukier
 

Mais de Daniel Cukier (20)

Solidity: Zero to Hero Corporate Training
Solidity: Zero to Hero Corporate TrainingSolidity: Zero to Hero Corporate Training
Solidity: Zero to Hero Corporate Training
 
Spring e Injeção de Dependência
Spring e Injeção de DependênciaSpring e Injeção de Dependência
Spring e Injeção de Dependência
 
Pair programming
Pair programmingPair programming
Pair programming
 
Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...
Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...
Eficiency and Low Cost: Pro Tips for you to save 50% of your money with Googl...
 
Startup Communities: From Nascence to Maturity
Startup Communities: From Nascence to MaturityStartup Communities: From Nascence to Maturity
Startup Communities: From Nascence to Maturity
 
Technology Startups Ecosystem in China - Lessons to other ecosystems
Technology Startups  Ecosystem in China - Lessons to other ecosystemsTechnology Startups  Ecosystem in China - Lessons to other ecosystems
Technology Startups Ecosystem in China - Lessons to other ecosystems
 
Software Startup Ecosystems Evolution - The New York City Case Study
Software Startup Ecosystems Evolution - The New York City Case StudySoftware Startup Ecosystems Evolution - The New York City Case Study
Software Startup Ecosystems Evolution - The New York City Case Study
 
Maturity model for Startup Ecosystems
Maturity model for Startup EcosystemsMaturity model for Startup Ecosystems
Maturity model for Startup Ecosystems
 
Why Google Cloud is so special? Stories from a cloud user
Why Google Cloud is so special?  Stories from a cloud userWhy Google Cloud is so special?  Stories from a cloud user
Why Google Cloud is so special? Stories from a cloud user
 
Software Architectures for a Single Person Team
Software Architectures for a Single Person TeamSoftware Architectures for a Single Person Team
Software Architectures for a Single Person Team
 
Startup Communities
Startup CommunitiesStartup Communities
Startup Communities
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
O dia a dia de uma Startup
O dia a dia de uma StartupO dia a dia de uma Startup
O dia a dia de uma Startup
 
Injeção de Dependência e Testes com Dublês
Injeção de Dependência e Testes com DublêsInjeção de Dependência e Testes com Dublês
Injeção de Dependência e Testes com Dublês
 
Selecting Empirical Methods for Software Engineering
Selecting Empirical Methods for Software EngineeringSelecting Empirical Methods for Software Engineering
Selecting Empirical Methods for Software Engineering
 
Is Computer Science Science?
Is Computer Science Science?Is Computer Science Science?
Is Computer Science Science?
 
Ruby Robots
Ruby RobotsRuby Robots
Ruby Robots
 
Better Science Through Art
Better Science Through ArtBetter Science Through Art
Better Science Through Art
 
Designed as Designer
Designed as DesignerDesigned as Designer
Designed as Designer
 

Introdução ao Domain Driven Design (DDD

  • 1. Uma introdução a Domain Driven Design Daniel Cukier danicuki@ime.usp.br IME-USP quinta-feira, 26 de fevereiro de 2009
  • 2. Padrões Um padrão é uma regra de três partes que expressa a relação entre um certo contexto1, um problema 2 e uma solução 3 2 quinta-feira, 26 de fevereiro de 2009
  • 3. O que é DDD ✦ Livro de Eric Evans (2004) ✦ Padrões ✦ Boas práticas ✦ Experiência 3 quinta-feira, 26 de fevereiro de 2009
  • 4. Foco: Domínio ✦ Alinhamento com negócio ✦ Isolamento entre domínios ✦ Reutilização ✦ Mínimo acoplamento ✦ Independente de tecnologia 4 quinta-feira, 26 de fevereiro de 2009
  • 5. DDD A volta da Orientação a Objetos? 5 quinta-feira, 26 de fevereiro de 2009
  • 6. Padrões no DDD [Contexto.] [Discussão do problema.] Resumo do problema. Discussão da solução. Por esta razão: Resumo da solução. Conseqüências, implementação, exemplos. [Contexto resultante.]6 quinta-feira, 26 de fevereiro de 2009
  • 7. DDD Colocando o Blocos de modelo de construção do domínio para MDD funcionar Refatorando para compreender Projeto profundamente o estratégico modelo 7 quinta-feira, 26 de fevereiro de 2009
  • 8. Colocando o modelo de domínio para funcionar quinta-feira, 26 de fevereiro de 2009
  • 9. Linguagem Ubíqua 9 quinta-feira, 26 de fevereiro de 2009
  • 10. Model Driven Design Domínio guia Modelo Refatoração Design Desenvolvedores Software não serve perdidos e tecnologia para o domínio inadequada aperfeiçoa 10 quinta-feira, 26 de fevereiro de 2009
  • 11. Blocos de Construção do Model Driven Design quinta-feira, 26 de fevereiro de 2009
  • 12. Arquitetura em Camadas Interface de Usuário Aplicação Domínio DDD Infra-estrutura 12 quinta-feira, 26 de fevereiro de 2009
  • 13. Entidades 13 quinta-feira, 26 de fevereiro de 2009
  • 14. Objetos de Valores ✦ Pra quem não precisa de identidade ✦ Imutáveis ✦ Descrevem coisas ✦ Ciclo de vida rápido ✦ Exemplos: Strings, números, cores 14 quinta-feira, 26 de fevereiro de 2009
  • 15. Agregados Interface Entidade Agregado Objeto de Objeto de Entidade Valor Valor quinta-feira, 26 de fevereiro de 2009
  • 16. Fábricas ✦ Quando construir (Agregados) for complexo ✦ Devem ser sempre abstratas ✦ Não fazem parte do modelo, mas do domínio 16 quinta-feira, 26 de fevereiro de 2009
  • 17. Serviços 1. A operação não faz parte de nenhuma Entidade ou Objeto de Valor 2. Interface fala a língua do Domínio 3. Sem estado 17 quinta-feira, 26 de fevereiro de 2009
  • 18. Módulos ✦ Agrupe conceitos do modelo, não código ✦ Baixo acoplamento / alta coesão ✦ Nomes da Linguagem Ubíqua Modelo = História Módulo = Capítulo Módulo = Capítulo Módulo = Capítulo Módulo = Capítulo Módulo = Capítulo Módulo = Capítulo 18 quinta-feira, 26 de fevereiro de 2009
  • 19. Repositórios Código b usca Cliente Repositório cria Entidade Agregados Agregados Agregados Agregados Agregados Entidades mo ve Entidades Entidades re Entidades Entidades Entidades 19 quinta-feira, 26 de fevereiro de 2009
  • 20. Linguagem Model Ubíqua Driven Design exp ress am ode nomes da lo c omo Módulos Serviços Objetos Entidades acess o com Valor antémde enc m sula integrida Repositórios ap comsul ncapm e co com m la a co psu ac ca es en ocs om Fábricas encapsula com Agregados 20 quinta-feira, 26 de fevereiro de 2009
  • 21. Refatorando para compreender profundamente o modelo quinta-feira, 26 de fevereiro de 2009
  • 22. Interfaces de Intenção Revelada Eu faço exatamente isso. Não precisa se preocupar como 22 quinta-feira, 26 de fevereiro de 2009
  • 23. Funções sem Efeitos Colaterais ✦ Colocar tudo que for possível em funções, principalmente em cálculos complexos ✦ Onde não der, usar Comandos que fazem poucas operações e não retornam objetos do domínio 23 quinta-feira, 26 de fevereiro de 2009
  • 24. Asserções ✦ Testes de unidade ✦ Usar facilidades da linguagem ✦ Testam o comportamento dos Comandos 24 quinta-feira, 26 de fevereiro de 2009
  • 25. Linguagem Model Driven Design Ubíqua dese expressa n usanhadas modelo do através de Interfaces de Intenção Revelada torna efeitos cria seguras colaterais e simples explícitos com Funções sem Efeitos Asserções Colaterais torna composição segura quinta-feira, 26 de fevereiro de 2009
  • 26. Projeto Estratégico 26 quinta-feira, 26 de fevereiro de 2009
  • 27. Contexto Delimitado As células existem porque sua membrana define o que está dentro ou fora e determina o que pode entrar 27 quinta-feira, 26 de fevereiro de 2009
  • 28. Integração Contínua Testes codificação Novo Elemento do Modelo Implementação ✦ Testes automatizados ✦ Processo de build automático ✦ Sincronização diária ✦ Relatórios 28 quinta-feira, 26 de fevereiro de 2009
  • 29. Mapa do Contexto Modelo no Mapa de Contexto Modelo no Tradução Contexto 29 quinta-feira, 26 de fevereiro de 2009
  • 30. Núcleo Compartilhado Compartilhado Mapa de Tradução ✦ É mais difícil fazer mudanças ✦ Evita (mas não elimina) duplicações 30 quinta-feira, 26 de fevereiro de 2009
  • 31. Produtor-Consumidor ✦ Testes automatizados ✦ Cliente-Fornecedor 31 quinta-feira, 26 de fevereiro de 2009
  • 32. Conformista ✦ Time fornecedor não tem interesse em ajudar ✦ Tira complexidade de tradução entre contextos ✦ Mesma linguagem ubíqua ✦ Parecido com Núcleo Compartilhado, mas cliente não tem poder de modificação 32 quinta-feira, 26 de fevereiro de 2009
  • 33. Camada Anti-corrupção Seu sistema Camada Anti-corrupção Outro Sistema Classe Serviço Adaptador Interface elegante A A complicada Outras coisas Tradutor 1 Coisas bem feitas irrelevantes Fachada Classe Classe cara Tradutor 2 bagunçada Ok, isso a Serviço Adaptador Você nem gente tem que B B quer saber refatorar 33 quinta-feira, 26 de fevereiro de 2009
  • 34. Caminhos Separados ✦ Quando integrar custa caro e o benefício é pequeno ✦ Contexto delimitado que não tem nenhuma conexão com os outros 34 quinta-feira, 26 de fevereiro de 2009
  • 35. Resumindo 1. Trabalhando com um modelo 2. Blocos de construção 3. Refatorando e evoluindo 4. Refinando, destilando 35 quinta-feira, 26 de fevereiro de 2009
  • 36. quinta-feira, 26 de fevereiro de 2009
  • 37. Núcleo Serviço de Linguagem Contexto Integração Conformista Compar- Hospedagem Publicada Delimitado Contínua tilhado Aberto Camada Interfaces de Model Contornos Linguagem Arquitetura Mapa do Anti- Intenção Driven Conceituais Ubíqua em Camadas Contexto corrupção Revelada Design Fechamento Funções sem Caminhos Núcleo Núcleo Objetos de de Efeitos Entidades Separados Abstrato Segregado Valores Isso não é tudo Operações Colaterais Classes Subdomínios Núcleo do Mecanismos Asserções Serviços Módulos Isoladas Genéricos Domínio Coesivos Nível de Sentença da Ordem Núcleo Conheci- Visão do Agregados Fábricas que Evolui Destacado mento Domínio Arcabouço Camadas de Metáfora Componente Responsa- Repositórios de Sistema Plugável bilidade quinta-feira, 26 de fevereiro de 2009
  • 38. Referências ✦Evans, Eric - Domain Driven Design, Addison- Wesley - 2004 ✦http://www.infoq.com/resource/minibooks/ domain-driven-design-quickly/en/pdf/ DomainDrivenDesignQuicklyOnline.pdf 38 quinta-feira, 26 de fevereiro de 2009