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

Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareAricelio Souza
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroFabrício Rissetto
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slidesthinkddd
 
Top down and botttom up Parsing
Top down     and botttom up ParsingTop down     and botttom up Parsing
Top down and botttom up ParsingGerwin Ocsena
 
Introdução ao desenvolvimento de firmwares
Introdução ao desenvolvimento de firmwaresIntrodução ao desenvolvimento de firmwares
Introdução ao desenvolvimento de firmwareselliando dias
 
Excel fórmulas básicas
Excel fórmulas básicasExcel fórmulas básicas
Excel fórmulas básicasAfonso Lima
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareelliando dias
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git민태 김
 
Introdução ao Firebase
Introdução ao FirebaseIntrodução ao Firebase
Introdução ao FirebaseJose Papo, MSc
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPClayton de Almeida Souza
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)승용 윤
 
Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?Maxime Sanglan-Charlier
 
Advanced Git Tutorial
Advanced Git TutorialAdvanced Git Tutorial
Advanced Git TutorialSage Sharp
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDDsergiopolo
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Mariana Camargo
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 

Mais procurados (20)

Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to Hero
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slides
 
Top down and botttom up Parsing
Top down     and botttom up ParsingTop down     and botttom up Parsing
Top down and botttom up Parsing
 
Introdução ao desenvolvimento de firmwares
Introdução ao desenvolvimento de firmwaresIntrodução ao desenvolvimento de firmwares
Introdução ao desenvolvimento de firmwares
 
Excel fórmulas básicas
Excel fórmulas básicasExcel fórmulas básicas
Excel fórmulas básicas
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
Introdução ao Firebase
Introdução ao FirebaseIntrodução ao Firebase
Introdução ao Firebase
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHP
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)
 
Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?Le Domain Driven Design, comment bien démarrer ?
Le Domain Driven Design, comment bien démarrer ?
 
Loop invariant computation
Loop invariant computationLoop invariant computation
Loop invariant computation
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Advanced Git Tutorial
Advanced Git TutorialAdvanced Git Tutorial
Advanced Git Tutorial
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 

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
 

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)
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
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
 

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/