SlideShare uma empresa Scribd logo
André Zanatta Borgonovo
1.   Introdução
2.   Conceitos
3.   Arquitetura
4.   Artefatos de Domínio (exemplos em C#)
5.   Aplicação e Processo
O que é e não é DDD
   Algo que resolve tudo
   Sempre a melhor solução
   Um caminho fácil para seguir



     “Everything should be made as simple as
            possible, but not simpler.”
                  Albert Einsten
   Design (Projeto) Orientado ao Domínio
   Uma abordagem de desenvolvimento de
    software
   Uma metodologia de arquitetura para a
    evolução de um sistema alinhado às
    necessidades do negócio
   Software OO feito da maneira correta (Jak
    Charlton, DDD Step-by-step)
“Atacando as Complexidades
  no Coração do Software”
                             Eric Evans
1.   Corrige a arquitetura do projeto. Diminui a
     complexidade e aumenta a manutenibilidade
     da aplicação
2.   Você faz software para durar
3.   Quem deve se preocupar com DDD?
4.   “Durabilidade” do DDD
5.   Outros *DDs
   O foco é no domínio, são as regras de
    negócio, os comportamentos
   O foco NÃO é trabalhar com o banco de
    dados
   Software de negócios com regras complexas

              “Domínio é a área de
           conhecimento do software”
   O foco deve ser o domínio e a lógica do domínio
   Projetos complexos devem ser baseados em um
    modelo
   Iniciar uma colaboração criativa entre a área
    técnica e os domain experts para iterativamente
    estarem mais perto do coração conceitual do
    problema
Linguagem ubíqua, contextos
delimitados, módulos, domain
expert, domínio e modelo
Ubiquitous = Ubíquo = Está em todo lugar

Linguagem ubíqua é a linguagem usada pelo:

    Business expert = Domain expert = Product owner (Scrum)

•       O time inteiro utiliza a mesma linguagem
•       Não utilizar linguagem técnica para falar com o Domain
        expert
•       Proximidade entre o Domain expert e os desenvolvedores
•       A análise realizada deve ser natural para o Domain expert
•       É importante que todos do projeto conheçam o domínio
    •      Substantivos = Classes
    •      Verbos = Métodos, Serviços e etc.
   É relativo. Não tem padrão. Baseado em
    abstrações.
   É usado para resolver problemas. Tem que
    ser útil.
   Deve estar atualizado. Deve refletir no
    código.
   Representa o domínio.

       Use POCOs (Plain Old CLR Objects)
Pode ser assim:   Ferramenta ajuda a manter
                    seu modelo atualizado


                      …Ou assim:
Apresentação
Aplicação
Domínio
Infraestrutura
•   Camadas devem estar separadas
•   Separação de responsabilidades
•   Arquitetura flexível



                   Layers X Tiers
             Layers: Camadas lógicas
         Tiers: “Projetos do Visual Studio”
Introdução ao Domain-Driven Design
Usuário pode ser outro sistema.
Camada de apresentação
Coordena as atividades (workflow)
da aplicação. Transformação de
objetos (DTOs).
Transação, auditoria e segurança.
“A camada de domínio é o
coração do software”
Persistência de dados.
Conceitos transversais:
autenticação, autorização,
cache, gerenciamento de
exceções, log, validação.
Usuário pode ser outro sistema.
Camada de apresentação

Coordena as atividades (workflow)
da aplicação. Transformação de
objetos (DTOs). Transação,
auditoria e segurança.
“A camada de domínio é o
coração do software”

Persistência de dados.
Conceitos transversais:
autenticação, autorização,
cache, gerenciamento de
exceções, log, validação.
Introdução ao Domain-Driven Design
Entidades, objetos de valor,
agregações, fábricas, serviços
e repositórios
   Objetos que tem significado no Domínio

   Tem identidade

   Exemplos:
    ◦ Cliente
    ◦ Carro
    ◦ Produto
Abstração para entidades


Entidade simples
   Não tem identidade para o negócio
   São reconhecidos pelos seus atributos
   Atributo diferente = objeto diferente
   Imutáveis
   Exemplos:
    ◦ Cores
    ◦ Coordenadas
    ◦ Endereços
Abstração para
                          objetos de valor




Objeto de valor simples
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven Design
   Reúne entidades e objetos de valor que
    fazem sentido no domínio
   Raiz da agregação (Aggregate Root)
   Regras de agregações:
    ◦ Todas as atualizações passam pela raiz
    ◦ Todas as referencias obtidas para os objetos
      recupera-se pela raiz
    ◦ Exclusão apaga todos os filhos da agregação
    ◦ Regras de negócio são garantidas pela raiz
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven Design
   Resolvem problemas de negócio, mas não
    são entidades ou objetos de valor
   Um bom serviço tem três caracteristicas:
    1. A operação é relacionada a um conceito do
       domínio que não é naturalmente parte de uma
       entidade ou objeto de valor
    2. A interface é definida baseada em outros objetos
       do modelo do dominio
    3. A operação é Stateless
Introdução ao Domain-Driven Design
   Criam objetos de negócio

   É responsabilidade de um objeto construir a
    si mesmo?

   Regras complexas para construção

   Fábrica cria objetos consistentes
Introdução ao Domain-Driven Design
   “Não tem banco de dados”
   Persistence Ignorance
   Representam uma lista de itens em memória
   Não tem lógica de negócio. No máximo valida
    consistência do objeto. Assim como guardou
    deve ser recuperado
   São especificados para Agregações, não para
    Entidades
Abstração para repositórios




Repositório simples
Exemplo de
implementação de
repositório com Entity
Framework
   Fábricas criam os objetos

   Repositórios:
    ◦   Inserem;
    ◦   Recuperam;
    ◦   Alteram;
    ◦   Destroem os objetos.
Go DDD, go Agile!
 Regras de negócio complexas
 Atenção:
    ◦ Arquitetos geralmente trabalham em projetos
      complexos
    ◦ Projetos simples podem se tornar importantes para
      o negócio da empresa no futuro



Use DDD na maior parte dos softwares que tem
             regra de negócio
   Não para o desenvolvimento em cascata
    (Waterfall). Recomendado desenvolvimento
    ágil

   DDD aceita as mudanças. Software se torna
    altamente adaptável

   Proximidade e contato com o Domain expert
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven Design
Autor
André Zanatta Borgonovo
azborgonovo@gmail.com
@azborgonovo



Links Recomendados
http://domaindrivendesign.org/
http://microsoftnlayerapp.codeplex.com/
http://blog.lambda3.com.br/

Mais conteúdo relacionado

PPTX
TDD - Test Driven Development
PDF
Feature Driven Development - FDD
PPTX
Domain-Driven Design - Aplicada a um estudo de caso
PPT
design patterns - introdução
PDF
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
PDF
Arquitetura de Software Visão Geral
PDF
Aula 1 - Revisão UML
TDD - Test Driven Development
Feature Driven Development - FDD
Domain-Driven Design - Aplicada a um estudo de caso
design patterns - introdução
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Arquitetura de Software Visão Geral
Aula 1 - Revisão UML

Mais procurados (20)

PDF
3 Expression Du Besoin
PPTX
SOA - Uma Breve Introdução
PDF
Introducao a Arquitetura de Software
PDF
Padroes De Projeto
PDF
Introdução à linguagem UML
PDF
Padrões de Projeto de Software
PDF
Gestao de processos
PPTX
Enteprise Integration Patterns
PDF
Business Process Modeling Notation –(BPMN)
PDF
UML - Diagrama de Pacotes
PDF
Gerenciamento das comunicações do Projeto
PDF
Gerenciamento de escopo PMBOK
PDF
Comment mettre en place un bureau de projets avec succès !
PPT
Conceitos de básicos de qualidade de software
PDF
Arquitetura de microsserviços
DOCX
Domain Controller
PPTX
Gerenciamento de projetos - Iniciação
3 Expression Du Besoin
SOA - Uma Breve Introdução
Introducao a Arquitetura de Software
Padroes De Projeto
Introdução à linguagem UML
Padrões de Projeto de Software
Gestao de processos
Enteprise Integration Patterns
Business Process Modeling Notation –(BPMN)
UML - Diagrama de Pacotes
Gerenciamento das comunicações do Projeto
Gerenciamento de escopo PMBOK
Comment mettre en place un bureau de projets avec succès !
Conceitos de básicos de qualidade de software
Arquitetura de microsserviços
Domain Controller
Gerenciamento de projetos - Iniciação
Anúncio

Destaque (20)

PPTX
Domain driven design - Visão Geral
PPTX
Domain Driven Design (DDD)
PDF
Entendendo Domain-Driven Design
PDF
Domain Driven Design Up And Running
PPTX
DDDesign Challenges
PPTX
Design de software com ASP.NET MVC
PPTX
Uma introdução ao Domain Driven Design
PPT
Domain-Driven Design - Uma Abordagem Introdutória
PDF
Domain-Driven-Design
PPT
Criandeiros - Grupo de estudos: MVC
KEY
Event sourcing
PPTX
Domain Driven Design - DDDSydney 2011
PDF
Event based modeling - eng
PDF
Apache mahout - introduction
PDF
An introduction to predictionIO
PDF
PC = Personal Cloud (or how to use your development machine with Vagrant and ...
PDF
Introduction to CFEngine
PDF
Managing computational resources with Apache Mesos
Domain driven design - Visão Geral
Domain Driven Design (DDD)
Entendendo Domain-Driven Design
Domain Driven Design Up And Running
DDDesign Challenges
Design de software com ASP.NET MVC
Uma introdução ao Domain Driven Design
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven-Design
Criandeiros - Grupo de estudos: MVC
Event sourcing
Domain Driven Design - DDDSydney 2011
Event based modeling - eng
Apache mahout - introduction
An introduction to predictionIO
PC = Personal Cloud (or how to use your development machine with Vagrant and ...
Introduction to CFEngine
Managing computational resources with Apache Mesos
Anúncio

Semelhante a Introdução ao Domain-Driven Design (20)

PPTX
Domain-Driven Design
PDF
Domain-Driven-Design
PPT
DDD > Experiências
PPTX
Programando com prazer com DDD
PPTX
Domain Driven Design
PPTX
Aula 8 - DDD - Domain Driven Design.pptx
PDF
Domain Driven Design com Python
PDF
DDD - Domain Driven Design
PPT
Domain Driven Design (DDD) - DevIsland, BH
PPTX
Domain-Driven Design
PDF
Treinamento DDD .Net
PDF
PDF
Domain Driven Design - Aplicando estrategias e padrões
PDF
Análise de sistemas oo 1
PPTX
DDD - Step by Step
PDF
MVC já era! O negócio é DCI!
PDF
Aula 1 4
PPTX
Framework Entities - Apresentação da Defesa da Dissertacao
PPT
Design Patterns
PDF
DDD e Microsservicos - do negócio à arquitetura
Domain-Driven Design
Domain-Driven-Design
DDD > Experiências
Programando com prazer com DDD
Domain Driven Design
Aula 8 - DDD - Domain Driven Design.pptx
Domain Driven Design com Python
DDD - Domain Driven Design
Domain Driven Design (DDD) - DevIsland, BH
Domain-Driven Design
Treinamento DDD .Net
Domain Driven Design - Aplicando estrategias e padrões
Análise de sistemas oo 1
DDD - Step by Step
MVC já era! O negócio é DCI!
Aula 1 4
Framework Entities - Apresentação da Defesa da Dissertacao
Design Patterns
DDD e Microsservicos - do negócio à arquitetura

Último (11)

PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Eng. Software - pontos essenciais para o início
PDF
Manejo integrado de pragas na cultura do algodão
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Utilizando code blockes por andre backes
PPTX
Mecânico de Manutenção de Equipamentos.pptx
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Eng. Software - pontos essenciais para o início
Manejo integrado de pragas na cultura do algodão
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Arquitetura de computadores - Memórias Secundárias
Utilizando code blockes por andre backes
Mecânico de Manutenção de Equipamentos.pptx
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Viasol Energia Solar -Soluções para geração e economia de energia

Introdução ao Domain-Driven Design

  • 2. 1. Introdução 2. Conceitos 3. Arquitetura 4. Artefatos de Domínio (exemplos em C#) 5. Aplicação e Processo
  • 3. O que é e não é DDD
  • 4. Algo que resolve tudo  Sempre a melhor solução  Um caminho fácil para seguir “Everything should be made as simple as possible, but not simpler.” Albert Einsten
  • 5. Design (Projeto) Orientado ao Domínio  Uma abordagem de desenvolvimento de software  Uma metodologia de arquitetura para a evolução de um sistema alinhado às necessidades do negócio  Software OO feito da maneira correta (Jak Charlton, DDD Step-by-step)
  • 6. “Atacando as Complexidades no Coração do Software” Eric Evans
  • 7. 1. Corrige a arquitetura do projeto. Diminui a complexidade e aumenta a manutenibilidade da aplicação 2. Você faz software para durar 3. Quem deve se preocupar com DDD? 4. “Durabilidade” do DDD 5. Outros *DDs
  • 8. O foco é no domínio, são as regras de negócio, os comportamentos  O foco NÃO é trabalhar com o banco de dados  Software de negócios com regras complexas “Domínio é a área de conhecimento do software”
  • 9. O foco deve ser o domínio e a lógica do domínio  Projetos complexos devem ser baseados em um modelo  Iniciar uma colaboração criativa entre a área técnica e os domain experts para iterativamente estarem mais perto do coração conceitual do problema
  • 10. Linguagem ubíqua, contextos delimitados, módulos, domain expert, domínio e modelo
  • 11. Ubiquitous = Ubíquo = Está em todo lugar Linguagem ubíqua é a linguagem usada pelo: Business expert = Domain expert = Product owner (Scrum) • O time inteiro utiliza a mesma linguagem • Não utilizar linguagem técnica para falar com o Domain expert • Proximidade entre o Domain expert e os desenvolvedores • A análise realizada deve ser natural para o Domain expert • É importante que todos do projeto conheçam o domínio • Substantivos = Classes • Verbos = Métodos, Serviços e etc.
  • 12. É relativo. Não tem padrão. Baseado em abstrações.  É usado para resolver problemas. Tem que ser útil.  Deve estar atualizado. Deve refletir no código.  Representa o domínio. Use POCOs (Plain Old CLR Objects)
  • 13. Pode ser assim: Ferramenta ajuda a manter seu modelo atualizado …Ou assim:
  • 15. Camadas devem estar separadas • Separação de responsabilidades • Arquitetura flexível Layers X Tiers Layers: Camadas lógicas Tiers: “Projetos do Visual Studio”
  • 17. Usuário pode ser outro sistema. Camada de apresentação
  • 18. Coordena as atividades (workflow) da aplicação. Transformação de objetos (DTOs). Transação, auditoria e segurança.
  • 19. “A camada de domínio é o coração do software”
  • 20. Persistência de dados. Conceitos transversais: autenticação, autorização, cache, gerenciamento de exceções, log, validação.
  • 21. Usuário pode ser outro sistema. Camada de apresentação Coordena as atividades (workflow) da aplicação. Transformação de objetos (DTOs). Transação, auditoria e segurança. “A camada de domínio é o coração do software” Persistência de dados. Conceitos transversais: autenticação, autorização, cache, gerenciamento de exceções, log, validação.
  • 23. Entidades, objetos de valor, agregações, fábricas, serviços e repositórios
  • 24. Objetos que tem significado no Domínio  Tem identidade  Exemplos: ◦ Cliente ◦ Carro ◦ Produto
  • 26. Não tem identidade para o negócio  São reconhecidos pelos seus atributos  Atributo diferente = objeto diferente  Imutáveis  Exemplos: ◦ Cores ◦ Coordenadas ◦ Endereços
  • 27. Abstração para objetos de valor Objeto de valor simples
  • 30. Reúne entidades e objetos de valor que fazem sentido no domínio  Raiz da agregação (Aggregate Root)  Regras de agregações: ◦ Todas as atualizações passam pela raiz ◦ Todas as referencias obtidas para os objetos recupera-se pela raiz ◦ Exclusão apaga todos os filhos da agregação ◦ Regras de negócio são garantidas pela raiz
  • 33. Resolvem problemas de negócio, mas não são entidades ou objetos de valor  Um bom serviço tem três caracteristicas: 1. A operação é relacionada a um conceito do domínio que não é naturalmente parte de uma entidade ou objeto de valor 2. A interface é definida baseada em outros objetos do modelo do dominio 3. A operação é Stateless
  • 35. Criam objetos de negócio  É responsabilidade de um objeto construir a si mesmo?  Regras complexas para construção  Fábrica cria objetos consistentes
  • 37. “Não tem banco de dados”  Persistence Ignorance  Representam uma lista de itens em memória  Não tem lógica de negócio. No máximo valida consistência do objeto. Assim como guardou deve ser recuperado  São especificados para Agregações, não para Entidades
  • 40. Fábricas criam os objetos  Repositórios: ◦ Inserem; ◦ Recuperam; ◦ Alteram; ◦ Destroem os objetos.
  • 41. Go DDD, go Agile!
  • 42.  Regras de negócio complexas  Atenção: ◦ Arquitetos geralmente trabalham em projetos complexos ◦ Projetos simples podem se tornar importantes para o negócio da empresa no futuro Use DDD na maior parte dos softwares que tem regra de negócio
  • 43. Não para o desenvolvimento em cascata (Waterfall). Recomendado desenvolvimento ágil  DDD aceita as mudanças. Software se torna altamente adaptável  Proximidade e contato com o Domain expert
  • 46. Autor André Zanatta Borgonovo [email protected] @azborgonovo Links Recomendados http://domaindrivendesign.org/ http://microsoftnlayerapp.codeplex.com/ http://blog.lambda3.com.br/