SlideShare uma empresa Scribd logo
Domain-Driven Design Uma Abordagem Introdutória
Apresentações Armênio Cardoso Consultor, Arquiteto de Sistemas e Professor http://www. linkedin .com/in/ armeniocardoso http://www. slideshare .net/ armeniocardoso
Reflexões Quanto mais  simples  algo é, mais  fácil  é o seu  entendimento . Quanto mais  complexo  algo é, mais  difícil  é o seu  entendimento . Quanto  menos  você  entende  algo, mais  difícil  é consertá-lo ou modificá-lo. Conclusão : quanto mais complexo um  sistema fica, mais difícil e caro é mantê-lo. Max Kanat-Alexander, Code Simplicity.
Reflexões O  Desejo  de construir um software é diretamente proporcional ao seu  Valor  e inversamente proporcional ao  Esforço  dedicado a desenvolvê-lo. D = (Vn + Vf) / (Ei + Em) Max Kanat-Alexander, Code Simplicity. Vi = Valor de Implementação Vf = Valor Futuro Ei = Esforço de Implementação Em = Esforço de Manutenção
Reflexões Nossa Missão Desenvolver sistemas que... ...tenham o  máximo  de  Valor ... ...com o  mínimo  de  Esforço  de desenvolvimento.
Reflexões Cada vez mais as pessoas parecem confundir complexidade com sofisticação. O incompreensível deveria causar suspeita e não admiração.  Possivelmente, esta tendência resulta de uma crença errônea de que o uso de mistério confere uma aura de poder. Niklaus Wirth, “pai” da Linguagem Pascal.
Definições Domain-Driven Design  é uma abordagem para o Desenvolvimento de Software que estabelece uma forte ligação entre a implementação e o modelo evolutivo dos conceitos de negócio. Implementação X Negócios
Definições Domain-Driven Design  não é uma tecnologia ou uma metodologia.  DDD  fornece uma estrutura de práticas e terminologia para a tomada de decisões de design. O foco é acelerar os projetos de software e alinhar com os domínios de negócio.
Definições Domínio A esfera do conhecimento, influência ou atividade de negócio. A área de negócio que será abordada pelo projeto de software. Modelo Um sistema de abstrações que descreve aspectos selecionados de um domínio com o objetivo de resolver problemas de negócio.
Definições Idioma onipresente  (ubiquitous) Uma linguagem estruturada em torno do modelo de domínio e usado por todos os membros da equipe para conectar todas as atividades da equipe com o software. Contexto   A situação onde uma palavra ou declaração aparece, determinando o seu significado.
Peças do DDD Model-Driven Design Layered Architecture
Arquitetura em Camadas
Arquitetura em Camadas User Interface : responsável pela apresentação das informações e interpretação das interações dos usuários. Application Layer : coordena as atividades da aplicação. Domain Layer : contém os componentes de negócio – é o centro da aplicação. Infraestructure Layer : provê o suporte para as outras camadas, bibliotecas, persistência etc.
Peças do DDD Entities
Peças do DDD Entities Entidades derivam objetos com identidade, distinção e continuidade (ciclo de vida). Entidades podem ter atributos alterados sem que a identidade do objeto seja afetada. Entidades contém  métodos de negócio  que implementam regras que se aplicam ao objeto em questão. Pessoa, Aluno, Professor, Nota-fiscal.
Peças do DDD Value Objects
Peças do DDD Value Objects Value Object é um tipo de objeto que é imutável e não tem identidade. Value Object deriva objetos que são definidos pelos seus atributos e por isso são imutáveis. Objetos de valor não têm métodos de negócio. Endereço, Itens da Nota-Fiscal, Unidade da Federação, Estado Civil, Usuário (login e senha).
Peças do DDD Aggregates
Peças do DDD Aggregates   É uma Entidade composta por outros objetos (Entities e/ou Value Object) vista como uma unidade. Essa Entidade é denominada de Raiz da Agregação. A raiz de agregação garante a consistência das mudanças que são feitas dentro do agregado, impedindo que objetos externos realizem referências a seus membros. Nota-Fiscal é um agregado que contém Itens de Nota-Fiscal. Cliente é um agregado que contém Endereços.
Peças do DDD Services
Peças do DDD Services Quando uma operação de negócio não pertence conceitualmente a um único objeto esta reside em um Service. Services têm uma ligação estreita com os casos de uso modelados no sistema. Services não têm estado. A classe SecretariaService contém um método matricularAluno que recebe Aluno e Turma como parâmetros.
Peças do DDD Services A  Camada de Serviço  define os limites de uma aplicação e seu conjunto de operações disponíveis a partir da perspectiva do cliente.  Ela encapsula a lógica de negócios, transações e coordenação das respostas na implementação de suas operações. http://martinfowler.com/eaaCatalog/serviceLayer.html
Peças do DDD Factories
Peças do DDD Factories Métodos para criar objetos de domínio complexos devem delegar a objetos de fábrica especializados, de forma que as implementações possam ser facilmente mantidas. São úteis na criação de Aggregates.
Peças do DDD Repositories
Peças do DDD Repositories Um repositório é um mecanismo para encapsular o armazenamento, recuperação e comportamento de busca, que emula uma coleção de objetos.   Para cada tipo de objeto que precisa de acesso global, criar um Repositório que pode fornecer a ilusão de uma coleção em memória de todos os objetos desse tipo.
Critérios de Sucesso Use  DDD  se O seu domínio não é trivial. A equipe de desenvolvimento tem experiência e interesse em OOP/OOD. Existe o acesso aos detentores das informações sobre o domínio. O processo de desenvolvimento é iterativo.
Critérios de Sucesso Domain-Driven Design  é um tema muito amplo e contém muitas coisas que são difíceis ou impossíveis de incorporar no código de um aplicativo simples. Coisas a se destacar Comunicação com o especialista de domínio. Modelagem iterativa. Descoberta de uma linguagem onipresente.
Perguntas? e Obrigado!

Mais conteúdo relacionado

Destaque

Arquitetura de Sofware
Arquitetura de SofwareArquitetura de Sofware
Arquitetura de Sofware
Jefferson Moreira
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
Giovanni Bassi
 
Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
Thiago Pereira
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
leopp
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
Mauro Leal
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Ryan Padilha
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
André Borgonovo
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
Rafael Ponte
 

Destaque (8)

Arquitetura de Sofware
Arquitetura de SofwareArquitetura de Sofware
Arquitetura de Sofware
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 

Semelhante a Domain-Driven Design - Uma Abordagem Introdutória

DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
Graziella Bonizi
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
Henrique Riccio
 
DDD
DDDDDD
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014
Paulo Victor Gomes
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
iMasters
 
DDD in PHP
DDD in PHPDDD in PHP
DDD in PHP
Paulo Victor Gomes
 
O Archimate® como ferramenta de apoio para uso do TOGAF®
O Archimate® como ferramenta de apoio para uso do TOGAF® O Archimate® como ferramenta de apoio para uso do TOGAF®
O Archimate® como ferramenta de apoio para uso do TOGAF®
Blue Hawk - B&IT Management
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
Luís Cobucci
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
Comunidade NetPonto
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Rodrigo Cândido da Silva
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
Rodrigo Branas
 
Servico ad
Servico adServico ad
Servico ad
fernandao777
 
Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
ejedelmal
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Daniel Everling
 
Artigo23
Artigo23Artigo23
Artigo23
mpaf00 mpaf00
 
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SITeoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
Alessandro Almeida
 
Artigo
ArtigoArtigo
Apresentacao ADDs Cases Alfresco
Apresentacao ADDs Cases AlfrescoApresentacao ADDs Cases Alfresco
Apresentacao ADDs Cases Alfresco
ADDs Solutions
 
Artigo corrigido
Artigo corrigidoArtigo corrigido
Artigo corrigido
mpaf00 mpaf00
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
Milfont Consulting
 

Semelhante a Domain-Driven Design - Uma Abordagem Introdutória (20)

DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
DDD
DDDDDD
DDD
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
 
DDD in PHP
DDD in PHPDDD in PHP
DDD in PHP
 
O Archimate® como ferramenta de apoio para uso do TOGAF®
O Archimate® como ferramenta de apoio para uso do TOGAF® O Archimate® como ferramenta de apoio para uso do TOGAF®
O Archimate® como ferramenta de apoio para uso do TOGAF®
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Servico ad
Servico adServico ad
Servico ad
 
Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Artigo23
Artigo23Artigo23
Artigo23
 
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SITeoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
 
Artigo
ArtigoArtigo
Artigo
 
Apresentacao ADDs Cases Alfresco
Apresentacao ADDs Cases AlfrescoApresentacao ADDs Cases Alfresco
Apresentacao ADDs Cases Alfresco
 
Artigo corrigido
Artigo corrigidoArtigo corrigido
Artigo corrigido
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 

Mais de armeniocardoso

Guia para o Profissional Android
Guia para o Profissional AndroidGuia para o Profissional Android
Guia para o Profissional Android
armeniocardoso
 
Análise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e JavaAnálise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e Java
armeniocardoso
 
Guia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e NovidadesGuia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e Novidades
armeniocardoso
 
Java security
Java securityJava security
Java security
armeniocardoso
 
Guia para o Profissional Java
Guia para o Profissional JavaGuia para o Profissional Java
Guia para o Profissional Java
armeniocardoso
 
Netbeans
NetbeansNetbeans
Netbeans
armeniocardoso
 
Web Services
Web ServicesWeb Services
Web Services
armeniocardoso
 
Realtime Linux
Realtime LinuxRealtime Linux
Realtime Linux
armeniocardoso
 
Persistência de Objetos em Java
Persistência de Objetos em JavaPersistência de Objetos em Java
Persistência de Objetos em Java
armeniocardoso
 
JavaServer Faces
JavaServer FacesJavaServer Faces
JavaServer Faces
armeniocardoso
 
Java e XML
Java e XMLJava e XML
Java e XML
armeniocardoso
 
Modelando Sistemas com UML
Modelando Sistemas com UMLModelando Sistemas com UML
Modelando Sistemas com UML
armeniocardoso
 
Desenvolvendo com Java Open Source
Desenvolvendo com Java Open SourceDesenvolvendo com Java Open Source
Desenvolvendo com Java Open Source
armeniocardoso
 
Desenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com JavaDesenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com Java
armeniocardoso
 
DotNet vs. Java
DotNet vs. JavaDotNet vs. Java
DotNet vs. Java
armeniocardoso
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
armeniocardoso
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
armeniocardoso
 
Desenvolvimento RIA com Java
Desenvolvimento RIA com JavaDesenvolvimento RIA com Java
Desenvolvimento RIA com Java
armeniocardoso
 

Mais de armeniocardoso (18)

Guia para o Profissional Android
Guia para o Profissional AndroidGuia para o Profissional Android
Guia para o Profissional Android
 
Análise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e JavaAnálise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e Java
 
Guia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e NovidadesGuia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e Novidades
 
Java security
Java securityJava security
Java security
 
Guia para o Profissional Java
Guia para o Profissional JavaGuia para o Profissional Java
Guia para o Profissional Java
 
Netbeans
NetbeansNetbeans
Netbeans
 
Web Services
Web ServicesWeb Services
Web Services
 
Realtime Linux
Realtime LinuxRealtime Linux
Realtime Linux
 
Persistência de Objetos em Java
Persistência de Objetos em JavaPersistência de Objetos em Java
Persistência de Objetos em Java
 
JavaServer Faces
JavaServer FacesJavaServer Faces
JavaServer Faces
 
Java e XML
Java e XMLJava e XML
Java e XML
 
Modelando Sistemas com UML
Modelando Sistemas com UMLModelando Sistemas com UML
Modelando Sistemas com UML
 
Desenvolvendo com Java Open Source
Desenvolvendo com Java Open SourceDesenvolvendo com Java Open Source
Desenvolvendo com Java Open Source
 
Desenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com JavaDesenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com Java
 
DotNet vs. Java
DotNet vs. JavaDotNet vs. Java
DotNet vs. Java
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Desenvolvimento RIA com Java
Desenvolvimento RIA com JavaDesenvolvimento RIA com Java
Desenvolvimento RIA com Java
 

Domain-Driven Design - Uma Abordagem Introdutória

  • 1. Domain-Driven Design Uma Abordagem Introdutória
  • 2. Apresentações Armênio Cardoso Consultor, Arquiteto de Sistemas e Professor http://www. linkedin .com/in/ armeniocardoso http://www. slideshare .net/ armeniocardoso
  • 3. Reflexões Quanto mais simples algo é, mais fácil é o seu entendimento . Quanto mais complexo algo é, mais difícil é o seu entendimento . Quanto menos você entende algo, mais difícil é consertá-lo ou modificá-lo. Conclusão : quanto mais complexo um sistema fica, mais difícil e caro é mantê-lo. Max Kanat-Alexander, Code Simplicity.
  • 4. Reflexões O Desejo de construir um software é diretamente proporcional ao seu Valor e inversamente proporcional ao Esforço dedicado a desenvolvê-lo. D = (Vn + Vf) / (Ei + Em) Max Kanat-Alexander, Code Simplicity. Vi = Valor de Implementação Vf = Valor Futuro Ei = Esforço de Implementação Em = Esforço de Manutenção
  • 5. Reflexões Nossa Missão Desenvolver sistemas que... ...tenham o máximo de Valor ... ...com o mínimo de Esforço de desenvolvimento.
  • 6. Reflexões Cada vez mais as pessoas parecem confundir complexidade com sofisticação. O incompreensível deveria causar suspeita e não admiração. Possivelmente, esta tendência resulta de uma crença errônea de que o uso de mistério confere uma aura de poder. Niklaus Wirth, “pai” da Linguagem Pascal.
  • 7. Definições Domain-Driven Design é uma abordagem para o Desenvolvimento de Software que estabelece uma forte ligação entre a implementação e o modelo evolutivo dos conceitos de negócio. Implementação X Negócios
  • 8. Definições Domain-Driven Design não é uma tecnologia ou uma metodologia. DDD fornece uma estrutura de práticas e terminologia para a tomada de decisões de design. O foco é acelerar os projetos de software e alinhar com os domínios de negócio.
  • 9. Definições Domínio A esfera do conhecimento, influência ou atividade de negócio. A área de negócio que será abordada pelo projeto de software. Modelo Um sistema de abstrações que descreve aspectos selecionados de um domínio com o objetivo de resolver problemas de negócio.
  • 10. Definições Idioma onipresente (ubiquitous) Uma linguagem estruturada em torno do modelo de domínio e usado por todos os membros da equipe para conectar todas as atividades da equipe com o software. Contexto A situação onde uma palavra ou declaração aparece, determinando o seu significado.
  • 11. Peças do DDD Model-Driven Design Layered Architecture
  • 13. Arquitetura em Camadas User Interface : responsável pela apresentação das informações e interpretação das interações dos usuários. Application Layer : coordena as atividades da aplicação. Domain Layer : contém os componentes de negócio – é o centro da aplicação. Infraestructure Layer : provê o suporte para as outras camadas, bibliotecas, persistência etc.
  • 14. Peças do DDD Entities
  • 15. Peças do DDD Entities Entidades derivam objetos com identidade, distinção e continuidade (ciclo de vida). Entidades podem ter atributos alterados sem que a identidade do objeto seja afetada. Entidades contém métodos de negócio que implementam regras que se aplicam ao objeto em questão. Pessoa, Aluno, Professor, Nota-fiscal.
  • 16. Peças do DDD Value Objects
  • 17. Peças do DDD Value Objects Value Object é um tipo de objeto que é imutável e não tem identidade. Value Object deriva objetos que são definidos pelos seus atributos e por isso são imutáveis. Objetos de valor não têm métodos de negócio. Endereço, Itens da Nota-Fiscal, Unidade da Federação, Estado Civil, Usuário (login e senha).
  • 18. Peças do DDD Aggregates
  • 19. Peças do DDD Aggregates É uma Entidade composta por outros objetos (Entities e/ou Value Object) vista como uma unidade. Essa Entidade é denominada de Raiz da Agregação. A raiz de agregação garante a consistência das mudanças que são feitas dentro do agregado, impedindo que objetos externos realizem referências a seus membros. Nota-Fiscal é um agregado que contém Itens de Nota-Fiscal. Cliente é um agregado que contém Endereços.
  • 20. Peças do DDD Services
  • 21. Peças do DDD Services Quando uma operação de negócio não pertence conceitualmente a um único objeto esta reside em um Service. Services têm uma ligação estreita com os casos de uso modelados no sistema. Services não têm estado. A classe SecretariaService contém um método matricularAluno que recebe Aluno e Turma como parâmetros.
  • 22. Peças do DDD Services A Camada de Serviço define os limites de uma aplicação e seu conjunto de operações disponíveis a partir da perspectiva do cliente. Ela encapsula a lógica de negócios, transações e coordenação das respostas na implementação de suas operações. http://martinfowler.com/eaaCatalog/serviceLayer.html
  • 23. Peças do DDD Factories
  • 24. Peças do DDD Factories Métodos para criar objetos de domínio complexos devem delegar a objetos de fábrica especializados, de forma que as implementações possam ser facilmente mantidas. São úteis na criação de Aggregates.
  • 25. Peças do DDD Repositories
  • 26. Peças do DDD Repositories Um repositório é um mecanismo para encapsular o armazenamento, recuperação e comportamento de busca, que emula uma coleção de objetos. Para cada tipo de objeto que precisa de acesso global, criar um Repositório que pode fornecer a ilusão de uma coleção em memória de todos os objetos desse tipo.
  • 27. Critérios de Sucesso Use DDD se O seu domínio não é trivial. A equipe de desenvolvimento tem experiência e interesse em OOP/OOD. Existe o acesso aos detentores das informações sobre o domínio. O processo de desenvolvimento é iterativo.
  • 28. Critérios de Sucesso Domain-Driven Design é um tema muito amplo e contém muitas coisas que são difíceis ou impossíveis de incorporar no código de um aplicativo simples. Coisas a se destacar Comunicação com o especialista de domínio. Modelagem iterativa. Descoberta de uma linguagem onipresente.