SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Entendendo
    Domain-Driven Design

Rafael Ponte
http://www.rponte.com.br
rponte@gmail.com
Quem?
●   Desenvolvedor
●   Atualmente trabalha na IVIA
●
    Sócio fundador da Triadworks
●
    Entusiasta Java, JSF e DDD
●
    Coordenador do grupo JSF
Software design is art



“Software design is an art, and like any art it cannot be
taught and learned as a precise science, by means of
theorems and formulas.”
                                        Floyd Marinescu
O que é
Domain-Driven
Design?
Domain-Driven Design não é uma
tecnologia ou metodologia, mas sim
uma abordagem de design de software
disciplinada que reúne um conjunto de
conceitos, técnicas e princípios com
foco no domínio e na lógica do domínio
para criar um domain model.
Domain-Driven Design não é uma
tecnologia ou metodologia, mas sim
uma abordagem de design de software
disciplinada que reúne um conjunto de
conceitos, técnicas e princípios com
foco no domínio e na lógica do domínio
para criar um domain model.
Domain-Driven Design não é uma
tecnologia ou metodologia, mas sim
uma abordagem de design de software
disciplinada que reúne um conjunto de
conceitos, técnicas e princípios com
foco no domínio e na lógica do domínio
para criar um domain model.
O modelo pode ser
     expresso de várias formas,
      como uma apresentação
Domain-Driven Design não é uma
     em PowerPoint, diagramas
tecnologia ourascunho de
        em UML, metodologia, mas sim
      papel, peças de Lego, ou
uma abordagem de design de software
         mesmo o código da
disciplinada que reúne um conjunto de
             aplicação..
conceitos, técnicas e princípios com
foco no domínio e na lógica do domínio
para criar um domain model.
Domain-Driven Design não é uma
tecnologia ou metodologia, mas sim
uma abordagem de design de software
disciplinada que reúne um conjunto de
conceitos, técnicas e princípios com
foco no domínio e na lógica do domínio
para criar um domain model.
Strategic
  ...     Design      ...
                               Layered
                             architecture
Domain-Driven Design não é uma
  Ubiquitous        Domain
                    patterns
tecnologia ou metodologia, mas sim
  Language
uma abordagem de design de software
disciplinada que reúne um conjunto de
conceitos, técnicas e princípios com
                                     ...
foco no domínio e na lógica do domínio
para criar um domain model.
   Domain-Specific              Supple
   Language (DSL)                Design
                       OO
Ubiquitous Language
Layered architecture
Layered architecture
Domain patterns
Entity
Value Object
Repository
Service
Modelando
Objetos
Para implementar
um Domain Model...
     ...fuja da
arquitetura BOLOVO
BO
 Business Object

LO
 Layer Object

VO
 Value Object
Arquitetura Orientada a BOLOVO
ContaAction



              ContaForm



                          ContaVO



                                    ContaBO



                                              ContaDAO
                                                         DB
Arquitetura Orientada a BOLOVO
ContaAction



              ContaForm



                          ContaVO



                                    ContaBO



                                              ContaDAO
                                                         DB
ContaVO   ContaBO
Quais as
vantagens ao
adotar DDD?
Podemos destacar...
●   Quanto mais próximo você está do negócio
    menos sofre com mudanças
●   O entendimento do desenvolvedor sobre o
    negócio, evitando assim erros e ajudando no
    negócio em si, questionando e sugerindo
    otimizações
●
    Código menos acoplado e mais coeso
Concluindo
●   Procure utilizar DDD em aplicações com
    domínios complexos
●   Ubiquitous Language e Domain Model são o
    cerne da DDD
●
    Não se apegue a rigidez conceitual, e claro,
    não lute contra os frameworks
●
    Leia, mas leia muito sobre o assunto
Referências
●   Livro Domain-Driven Design, 2004 (Eric Evans)
●   Domain-Driven Design: http://domaindrivendesign.org/
●   GUJ: http://www.guj.com.br/
●   Caelum: http://www.caelum.com.br
●   Shoes' blog: http://blog.fragmental.com.br
●   Fowler's patterns: http://martinfowler.com/eaaCatalog/
●   Domain-Driven Design Quickly:
    http://www.infoq.com/minibooks/domain-driven-design-quickly
●   MundoJava Nº 17 e Nº 28: http://www.mundojava.com.br/
Obrigado!

     rponte@gmail.com
http://www.rponte.com.br/

Mais conteúdo relacionado

Mais procurados

Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Leinylson Fontinele
 
Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Pacc UAB
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Leinylson Fontinele
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosphelypploch
 
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
 
Tutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchTutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchDaniel Brandão
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
Software Aplicativo
Software AplicativoSoftware Aplicativo
Software AplicativoSergioSouza
 
Spryker in a nutshell
Spryker in a nutshellSpryker in a nutshell
Spryker in a nutshellFabian Wesner
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVCMichael Douglas
 
Manual execucao fiplan
Manual execucao fiplanManual execucao fiplan
Manual execucao fiplanleogondim26
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileCloves da Rocha
 
Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1Pacc UAB
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareÁlvaro Farias Pinheiro
 

Mais procurados (20)

Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Android Aula 1
Android Aula 1Android Aula 1
Android Aula 1
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
 
MVC
MVCMVC
MVC
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UML
 
Tutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchTutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL Workbench
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Software Aplicativo
Software AplicativoSoftware Aplicativo
Software Aplicativo
 
Spryker in a nutshell
Spryker in a nutshellSpryker in a nutshell
Spryker in a nutshell
 
Python
PythonPython
Python
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
Manual execucao fiplan
Manual execucao fiplanManual execucao fiplan
Manual execucao fiplan
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao Mobile
 
Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1Aula 2 - Introdução à programação de computadores - parte1
Aula 2 - Introdução à programação de computadores - parte1
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 

Destaque

Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíPriscila Mayumi
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven DesignDaniel Cukier
 
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 softwareYan Justino
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Mauro Leal
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip CalçadoJustjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip CalçadoPaulo Silveira
 
Garage Proxxima 2012 / dp6 - Data-driven Marketing
Garage Proxxima 2012 / dp6 - Data-driven MarketingGarage Proxxima 2012 / dp6 - Data-driven Marketing
Garage Proxxima 2012 / dp6 - Data-driven Marketingdp6
 
Social Targeting
Social TargetingSocial Targeting
Social TargetingE.LIFE
 
Introdução a nosql - II SACIC
Introdução a nosql - II SACICIntrodução a nosql - II SACIC
Introdução a nosql - II SACICcaironoleto
 
FSM, vetores e funções em PHP
FSM, vetores e funções em PHPFSM, vetores e funções em PHP
FSM, vetores e funções em PHPBreno Vitorino
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)Breno Vitorino
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)Breno Vitorino
 
1ª madrugada de testes net coders coding dojo
1ª madrugada de testes net coders   coding dojo1ª madrugada de testes net coders   coding dojo
1ª madrugada de testes net coders coding dojoPriscila Mayumi
 
OOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de LiskovOOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de LiskovPriscila Mayumi
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesDiana Ungaro Arnos
 

Destaque (20)

Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Microsoft MTACs
Microsoft MTACsMicrosoft MTACs
Microsoft MTACs
 
Domain driven design - Visão Geral
Domain driven design - Visão GeralDomain driven design - Visão Geral
Domain driven design - Visão Geral
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Iniciando com DDD
Iniciando com DDDIniciando com DDD
Iniciando com DDD
 
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
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip CalçadoJustjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
 
Garage Proxxima 2012 / dp6 - Data-driven Marketing
Garage Proxxima 2012 / dp6 - Data-driven MarketingGarage Proxxima 2012 / dp6 - Data-driven Marketing
Garage Proxxima 2012 / dp6 - Data-driven Marketing
 
Social Targeting
Social TargetingSocial Targeting
Social Targeting
 
Introdução a nosql - II SACIC
Introdução a nosql - II SACICIntrodução a nosql - II SACIC
Introdução a nosql - II SACIC
 
FSM, vetores e funções em PHP
FSM, vetores e funções em PHPFSM, vetores e funções em PHP
FSM, vetores e funções em PHP
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)
 
Introdução ao PHP
Introdução ao PHPIntrodução ao PHP
Introdução ao PHP
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
 
1ª madrugada de testes net coders coding dojo
1ª madrugada de testes net coders   coding dojo1ª madrugada de testes net coders   coding dojo
1ª madrugada de testes net coders coding dojo
 
Entity framework 7
Entity framework 7Entity framework 7
Entity framework 7
 
OOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de LiskovOOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de Liskov
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de Testes
 

Semelhante a Entendendo Domain-Driven Design

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
 
Domain Driven Design: como modelar uma aplicação em Node.js com DDD
Domain Driven Design: como modelar uma aplicação em Node.js com DDDDomain Driven Design: como modelar uma aplicação em Node.js com DDD
Domain Driven Design: como modelar uma aplicação em Node.js com DDDDaniel Baptista Dias
 
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é
 
Palestra - Profissão: Desenvolvedor
Palestra - Profissão: DesenvolvedorPalestra - Profissão: Desenvolvedor
Palestra - Profissão: DesenvolvedorDaniel Brandão
 
Domain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesDomain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesJoao Paulo Oliveira dos Santos
 
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
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
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
 
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 CuritibaCleiton Felipe Moraes
 
Introdução Domain-Driven-Design
Introdução Domain-Driven-Design Introdução Domain-Driven-Design
Introdução Domain-Driven-Design Jorge Oleques
 
Tópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsTópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsSaulo Lopes
 
Enterprise Architect - Sparx Systems
Enterprise Architect - Sparx Systems Enterprise Architect - Sparx Systems
Enterprise Architect - Sparx Systems Saldit Software
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 
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 CaixaThiago Bertuzzi
 
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ócioRalph Rassweiler
 
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
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a ModelagemRodrigo Branas
 

Semelhante a Entendendo Domain-Driven Design (20)

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
DDDDDD
DDD
 
Domain Driven Design: como modelar uma aplicação em Node.js com DDD
Domain Driven Design: como modelar uma aplicação em Node.js com DDDDomain Driven Design: como modelar uma aplicação em Node.js com DDD
Domain Driven Design: como modelar uma aplicação em Node.js com DDD
 
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
 
Palestra - Profissão: Desenvolvedor
Palestra - Profissão: DesenvolvedorPalestra - Profissão: Desenvolvedor
Palestra - Profissão: Desenvolvedor
 
Domain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesDomain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrões
 
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
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
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!
 
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
 
Introdução Domain-Driven-Design
Introdução Domain-Driven-Design Introdução Domain-Driven-Design
Introdução Domain-Driven-Design
 
Tópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsTópicos Emergentes - DevOps
Tópicos Emergentes - DevOps
 
CV Alexandre R. de Castro
CV Alexandre R. de CastroCV Alexandre R. de Castro
CV Alexandre R. de Castro
 
Enterprise Architect - Sparx Systems
Enterprise Architect - Sparx Systems Enterprise Architect - Sparx Systems
Enterprise Architect - Sparx Systems
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – 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
 
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
 
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...
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
 

Mais de Rafael Ponte

TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSETechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSERafael Ponte
 
TechDay Retrospectiva 2018
TechDay Retrospectiva 2018TechDay Retrospectiva 2018
TechDay Retrospectiva 2018Rafael Ponte
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeRafael Ponte
 
Como treinar seu estagiario
Como treinar seu estagiarioComo treinar seu estagiario
Como treinar seu estagiarioRafael Ponte
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoRafael Ponte
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Rafael Ponte
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Rafael Ponte
 
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Rafael Ponte
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Rafael Ponte
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Rafael Ponte
 
Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Rafael Ponte
 
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Rafael Ponte
 
Importância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaImportância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaRafael Ponte
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Rafael Ponte
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for JavaRafael Ponte
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
Importância dos testes automatizadoss
Importância dos testes automatizadossImportância dos testes automatizadoss
Importância dos testes automatizadossRafael Ponte
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFRafael Ponte
 
Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Rafael Ponte
 

Mais de Rafael Ponte (20)

TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSETechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
 
TechDay Retrospectiva 2018
TechDay Retrospectiva 2018TechDay Retrospectiva 2018
TechDay Retrospectiva 2018
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do Hype
 
Como treinar seu estagiario
Como treinar seu estagiarioComo treinar seu estagiario
Como treinar seu estagiario
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)
 
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 
Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)
 
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
 
Importância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaImportância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a dia
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for Java
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
Importância dos testes automatizadoss
Importância dos testes automatizadossImportância dos testes automatizadoss
Importância dos testes automatizadoss
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 
Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Curso de Java server faces (JSF)
Curso de Java server faces (JSF)
 

Entendendo Domain-Driven Design

  • 1. Entendendo Domain-Driven Design Rafael Ponte http://www.rponte.com.br rponte@gmail.com
  • 2. Quem? ● Desenvolvedor ● Atualmente trabalha na IVIA ● Sócio fundador da Triadworks ● Entusiasta Java, JSF e DDD ● Coordenador do grupo JSF
  • 3. Software design is art “Software design is an art, and like any art it cannot be taught and learned as a precise science, by means of theorems and formulas.” Floyd Marinescu
  • 5. Domain-Driven Design não é uma tecnologia ou metodologia, mas sim uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domain model.
  • 6. Domain-Driven Design não é uma tecnologia ou metodologia, mas sim uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domain model.
  • 7. Domain-Driven Design não é uma tecnologia ou metodologia, mas sim uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domain model.
  • 8. O modelo pode ser expresso de várias formas, como uma apresentação Domain-Driven Design não é uma em PowerPoint, diagramas tecnologia ourascunho de em UML, metodologia, mas sim papel, peças de Lego, ou uma abordagem de design de software mesmo o código da disciplinada que reúne um conjunto de aplicação.. conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domain model.
  • 9. Domain-Driven Design não é uma tecnologia ou metodologia, mas sim uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domain model.
  • 10. Strategic ... Design ... Layered architecture Domain-Driven Design não é uma Ubiquitous Domain patterns tecnologia ou metodologia, mas sim Language uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com ... foco no domínio e na lógica do domínio para criar um domain model. Domain-Specific Supple Language (DSL) Design OO
  • 20. Para implementar um Domain Model... ...fuja da arquitetura BOLOVO
  • 21. BO Business Object LO Layer Object VO Value Object
  • 22. Arquitetura Orientada a BOLOVO ContaAction ContaForm ContaVO ContaBO ContaDAO DB
  • 23. Arquitetura Orientada a BOLOVO ContaAction ContaForm ContaVO ContaBO ContaDAO DB
  • 24. ContaVO ContaBO
  • 25.
  • 26.
  • 28. Podemos destacar... ● Quanto mais próximo você está do negócio menos sofre com mudanças ● O entendimento do desenvolvedor sobre o negócio, evitando assim erros e ajudando no negócio em si, questionando e sugerindo otimizações ● Código menos acoplado e mais coeso
  • 29. Concluindo ● Procure utilizar DDD em aplicações com domínios complexos ● Ubiquitous Language e Domain Model são o cerne da DDD ● Não se apegue a rigidez conceitual, e claro, não lute contra os frameworks ● Leia, mas leia muito sobre o assunto
  • 30. Referências ● Livro Domain-Driven Design, 2004 (Eric Evans) ● Domain-Driven Design: http://domaindrivendesign.org/ ● GUJ: http://www.guj.com.br/ ● Caelum: http://www.caelum.com.br ● Shoes' blog: http://blog.fragmental.com.br ● Fowler's patterns: http://martinfowler.com/eaaCatalog/ ● Domain-Driven Design Quickly: http://www.infoq.com/minibooks/domain-driven-design-quickly ● MundoJava Nº 17 e Nº 28: http://www.mundojava.com.br/
  • 31. Obrigado! rponte@gmail.com http://www.rponte.com.br/