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.
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 O modelo pode ser expresso de várias formas, expresso de várias formas, como uma apresentação como uma apresentação
em PowerPoint, diagramas em PowerPoint, diagramas em UML, rascunho de em UML, rascunho de
papel, peças de Lego, ou papel, peças de Lego, ou mesmo o código da mesmo o código da
aplicação..aplicação..
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.
Ubiquitous Ubiquitous LanguageLanguage
Layered Layered architecturearchitecture
Domain Domain patternspatterns
Domain-Specific Domain-Specific Language (DSL)Language (DSL)
Supple Supple DesignDesign
Strategic Strategic DesignDesign
OOOO
......
...... ......
Ubiquitous Language
Layered architecture
Layered architecture
Domain patterns
Entity
Value Object
Repository
Service
Modelando Objetos
Para implementar um Domain Model...
...fuja da arquitetura BOLOVO
BOBusiness Object
LOLayer Object
VOValue Object
Arquitetura Orientada a BOLOVO
ContaAction
ContaForm
ContaVO
ContaBO
DBContaDAO
Arquitetura Orientada a BOLOVO
ContaAction
ContaForm
ContaVO
ContaBO
DBContaDAO
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/