SlideShare uma empresa Scribd logo
Software complexo? Entenda o seu domínio e desenhe um modelo Abordagem sobre o Desenho Dirigido ao Domínio (Domain-Driven  Design ou DDD)
Quem sou eu? Thiago Holder Software Developer Estudante de Sistemas da Informação
Objetivo Entender a importância de se pensar em um domínio, a linguagem que você usa para falar sobre ele.
“O desafio da complexidade”
O que é DDD? “ É uma maneira de pensar e um conjunto de prioridades, voltado para a aceleração de projetos de softwares com domínios complicados ”  Eric Evans.
O que o DDD apresenta? Boas práticas Padrões Experiência
Qual o foco do DDD? Regras de negócio complexos Isolamento entre domínios Reutilização Domínio Baixo acoplamento Independente de tecnologia
Padrões do DDD Contexto Resumo do problema Por esta Razão Discussão da solução Discussão do problema Conseqüências, Implementações e exemplo Resumo do problema Contexto resultante
Partes do DDD
O que é Domínio? Esfera de conhecimento, influência ou atividade. A área em que o usuário utiliza o software.
Modelo? Não Não
Excesso de informação atrapalha
Modelo
Os ingredientes  de uma modelagem eficaz
Ligando o modelo e a implementação Consulta Paciente * * Protótipo rudimentar
Cultivando uma linguagem baseada no modelo Consulta A Agenda() Paciente Consulta B Agenda() Agenda() Consulta C Frases consistentes com a estrutura do modelo e ser entendido sem ambigüidade e sem tradução
Desenvolvendo um modelo rico em conhecimento Consulta Agendamento Secretária Paciente Atendido Médico Verifica Disponibilidade Agenda Captar vários tipos de conhecimento
Destilando o modelo Agenda Médica Secretária Verifica Paciente Atendido Agenda a consulta Médico Consulta Realiza Novo modelo que distingue o conceito essencial
Colhendo idéia
Linguagem Ubíqua “ Quer dizer que estar em todos os lugares, ou seja onipresente”.
ModelDriven Design (MDD) Modelo Domínio Guia Design Refatoração Evolui Software perdido, dependente de tecnologia. Desenvolvedores perdidos.
Distância no o contexto do domínio Analista de Negócio Analista de  Sistemas Arquiteto Desenvolvedor
Tijolos de construção
Arquitetura em camadas Camadas dever ter sentido “Verifique suas responsabilidades” As camadas tem que ter separação.
Arquitetura proposta no DDD
Blocos que compõe o modelo
Entidade Entidade: têm significado no domínio Entidade: possuem identidades
Objeto de valor não tem identidade para o negócio São imutaveis Descrevem coisas, tipos... Ciclo de vida rápido Exemplo: cores, especialidade, tipo de dados.
Agregados Entidade Entidade Objeto de valor Objeto de valor
Exemplo <<Raiz>> Motor <<Raiz>> Carro Roda Cliente Posição Posição
Algumas regras
Fábricas Quando a criação de um objeto, ou AGREGADO inteiro, se torna complicada ou revela uma grande parte da estrutura interna, as FÁBRICAS fornecem o encapsulamento
Interação básica com uma fábrica A FÁBRICA faz o objeto que satisfaz o cliente e as regras internas O cliente especifica o que quer Cliente Fábrica Produto novos(parâmetros) criar produto
Serviços Não tem estado próprio Fica isolado do modelo Definido como o que ele pode fazer por um “cliente” “Verbo em vez de substantivo” Fala a linguagem ubíqua
Módulos ou Pacotes Os módulos existentes na camada de domínio devem surgir como uma parte significativa do modelo. Modelos = Histórias Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos
Código Cliente Entidade Repositório Repositórios Busca Agregado Entidade Entidade Cria Entidade Remover Agregado Entidade Agregado
Linguagem Ubíqua Design Dirigido por Modelos Expressar o modelo Nomes entram em Isolar o modelo Arquitetura em camadas Módulos Serviços Entidades Objeto de Valor Integridade Encapsula Encapsular Repositórios Fábricas Acessar Agregados
Obrigado E-mail:thiagoholder@gmail.com Blog:http//thiagoholder.wordpress.com Msn: thiagoholder Skype: thiagoholder

Mais conteúdo relacionado

Mais procurados

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Design Thinking - Prototipação
Design Thinking  - PrototipaçãoDesign Thinking  - Prototipação
Design Thinking - Prototipação
UFPA
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do software
Yan Justino
 
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
DNAD
 
O (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwareO (papel do) Arquiteto de Software
O (papel do) Arquiteto de Software
Peter Jandl Junior
 
CPBR7 - Pensamento Visual e Prototipagem
CPBR7 - Pensamento Visual e PrototipagemCPBR7 - Pensamento Visual e Prototipagem
CPBR7 - Pensamento Visual e Prototipagem
Nei Grando
 

Mais procurados (7)

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Design Thinking - Prototipação
Design Thinking  - PrototipaçãoDesign Thinking  - Prototipação
Design Thinking - Prototipação
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do software
 
Automatic programming
Automatic programmingAutomatic programming
Automatic programming
 
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
 
O (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwareO (papel do) Arquiteto de Software
O (papel do) Arquiteto de Software
 
CPBR7 - Pensamento Visual e Prototipagem
CPBR7 - Pensamento Visual e PrototipagemCPBR7 - Pensamento Visual e Prototipagem
CPBR7 - Pensamento Visual e Prototipagem
 

Destaque

Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
Wende Mendes
 
Criandeiros - Grupo de estudos: MVC
Criandeiros - Grupo de estudos: MVCCriandeiros - Grupo de estudos: MVC
Criandeiros - Grupo de estudos: MVC
Bruno Bemfica
 
Design de software com ASP.NET MVC
Design de software com ASP.NET MVCDesign de software com ASP.NET MVC
Design de software com ASP.NET MVC
Waldyr Felix
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
armeniocardoso
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
Ítalo Bandeira
 
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
 
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ívelRyan Padilha
 

Destaque (10)

Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
 
Criandeiros - Grupo de estudos: MVC
Criandeiros - Grupo de estudos: MVCCriandeiros - Grupo de estudos: MVC
Criandeiros - Grupo de estudos: MVC
 
Design de software com ASP.NET MVC
Design de software com ASP.NET MVCDesign de software com ASP.NET MVC
Design de software com ASP.NET MVC
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
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
 
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
 

Semelhante a Uma introdução ao Domain Driven Design

DDD
DDDDDD
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Daniel Everling
 
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
Yan Justino
 
tdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdftdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdf
Douglas Siviotti
 
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)
Luciano Condé
 
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
Thiago Bertuzzi
 
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Taller Negócio Digitais
 
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Isaac de Souza
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!
Isaac de Souza
 
clean code
clean codeclean code
clean code
Douglas Siviotti
 
Separando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestãoSeparando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestão
Rafael Chaves
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
Wende Mendes
 
Php Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsPhp Conf08 Enterprise Patterns
Php Conf08 Enterprise Patterns
Wildtech
 
Utilizando BDD com Specflow e Selenium para testes Web MSP Tech Day Curitiba
Utilizando BDD com Specflow e Selenium para testes Web MSP Tech Day CuritibaUtilizando BDD com Specflow e Selenium para testes Web MSP Tech Day Curitiba
Utilizando BDD com Specflow e Selenium para testes Web MSP Tech Day Curitiba
Cleiton Felipe Moraes
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
Ralph Rassweiler
 
Introdução a Domain-Driven Design
Introdução a Domain-Driven DesignIntrodução a Domain-Driven Design
Introdução a Domain-Driven Design
Maicon Carlos Pereira
 
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
 
DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
Diego Dezembro
 

Semelhante a Uma introdução ao Domain Driven Design (20)

DDD
DDDDDD
DDD
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
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
 
tdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdftdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdf
 
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)
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
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
 
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
 
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
Esquenta TDC - Como DDD e principalmente Domain Model contribuem na construçã...
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!
 
clean code
clean codeclean code
clean code
 
Separando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestãoSeparando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestão
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
 
Php Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsPhp Conf08 Enterprise Patterns
Php Conf08 Enterprise Patterns
 
Utilizando BDD com Specflow e Selenium para testes Web MSP Tech Day Curitiba
Utilizando BDD com Specflow e Selenium para testes Web MSP Tech Day CuritibaUtilizando BDD com Specflow e Selenium para testes Web MSP Tech Day Curitiba
Utilizando BDD com Specflow e Selenium para testes Web MSP Tech Day Curitiba
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Introdução a Domain-Driven Design
Introdução a Domain-Driven DesignIntrodução a Domain-Driven Design
Introdução a Domain-Driven Design
 
Carlos Eduardo Capparelli
Carlos Eduardo CapparelliCarlos Eduardo Capparelli
Carlos Eduardo Capparelli
 
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
 
DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
 

Uma introdução ao Domain Driven Design

  • 1. Software complexo? Entenda o seu domínio e desenhe um modelo Abordagem sobre o Desenho Dirigido ao Domínio (Domain-Driven Design ou DDD)
  • 2. Quem sou eu? Thiago Holder Software Developer Estudante de Sistemas da Informação
  • 3. Objetivo Entender a importância de se pensar em um domínio, a linguagem que você usa para falar sobre ele.
  • 4. “O desafio da complexidade”
  • 5. O que é DDD? “ É uma maneira de pensar e um conjunto de prioridades, voltado para a aceleração de projetos de softwares com domínios complicados ” Eric Evans.
  • 6. O que o DDD apresenta? Boas práticas Padrões Experiência
  • 7. Qual o foco do DDD? Regras de negócio complexos Isolamento entre domínios Reutilização Domínio Baixo acoplamento Independente de tecnologia
  • 8. Padrões do DDD Contexto Resumo do problema Por esta Razão Discussão da solução Discussão do problema Conseqüências, Implementações e exemplo Resumo do problema Contexto resultante
  • 10. O que é Domínio? Esfera de conhecimento, influência ou atividade. A área em que o usuário utiliza o software.
  • 14. Os ingredientes de uma modelagem eficaz
  • 15. Ligando o modelo e a implementação Consulta Paciente * * Protótipo rudimentar
  • 16. Cultivando uma linguagem baseada no modelo Consulta A Agenda() Paciente Consulta B Agenda() Agenda() Consulta C Frases consistentes com a estrutura do modelo e ser entendido sem ambigüidade e sem tradução
  • 17. Desenvolvendo um modelo rico em conhecimento Consulta Agendamento Secretária Paciente Atendido Médico Verifica Disponibilidade Agenda Captar vários tipos de conhecimento
  • 18. Destilando o modelo Agenda Médica Secretária Verifica Paciente Atendido Agenda a consulta Médico Consulta Realiza Novo modelo que distingue o conceito essencial
  • 20. Linguagem Ubíqua “ Quer dizer que estar em todos os lugares, ou seja onipresente”.
  • 21. ModelDriven Design (MDD) Modelo Domínio Guia Design Refatoração Evolui Software perdido, dependente de tecnologia. Desenvolvedores perdidos.
  • 22. Distância no o contexto do domínio Analista de Negócio Analista de Sistemas Arquiteto Desenvolvedor
  • 24. Arquitetura em camadas Camadas dever ter sentido “Verifique suas responsabilidades” As camadas tem que ter separação.
  • 26. Blocos que compõe o modelo
  • 27. Entidade Entidade: têm significado no domínio Entidade: possuem identidades
  • 28. Objeto de valor não tem identidade para o negócio São imutaveis Descrevem coisas, tipos... Ciclo de vida rápido Exemplo: cores, especialidade, tipo de dados.
  • 29.
  • 30. Agregados Entidade Entidade Objeto de valor Objeto de valor
  • 31. Exemplo <<Raiz>> Motor <<Raiz>> Carro Roda Cliente Posição Posição
  • 33. Fábricas Quando a criação de um objeto, ou AGREGADO inteiro, se torna complicada ou revela uma grande parte da estrutura interna, as FÁBRICAS fornecem o encapsulamento
  • 34. Interação básica com uma fábrica A FÁBRICA faz o objeto que satisfaz o cliente e as regras internas O cliente especifica o que quer Cliente Fábrica Produto novos(parâmetros) criar produto
  • 35. Serviços Não tem estado próprio Fica isolado do modelo Definido como o que ele pode fazer por um “cliente” “Verbo em vez de substantivo” Fala a linguagem ubíqua
  • 36. Módulos ou Pacotes Os módulos existentes na camada de domínio devem surgir como uma parte significativa do modelo. Modelos = Histórias Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos Módulos = Capítulos
  • 37. Código Cliente Entidade Repositório Repositórios Busca Agregado Entidade Entidade Cria Entidade Remover Agregado Entidade Agregado
  • 38. Linguagem Ubíqua Design Dirigido por Modelos Expressar o modelo Nomes entram em Isolar o modelo Arquitetura em camadas Módulos Serviços Entidades Objeto de Valor Integridade Encapsula Encapsular Repositórios Fábricas Acessar Agregados