13. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
O Modelo e a Linguagem Ubíqua
Os modelos são abstrações que visam refletir o código
Evans cita em seu livro que o modelo não pode ser "gordo" demais ao ponto de
prejudicar a compreensão do domínio.
14. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
O Modelo e a Linguagem Ubíqua
E o código, por sua vez, deve ser usado para detalhar o modelo.
Regras importantes devem estar expostas no modelo, e jamais escondidas no
código.
15. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
O Modelo e a Linguagem Ubíqua
O modelo deve ser muito claro!
Deve ser entendido absolutamente da mesma forma por qualquer
pessoa, seja ele
o usuário, o desenvolvedor, o arquiteto, o projetista, o
designer
a menina do marketing, a tia do café, etc
18. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
O Modelo e a Linguagem Ubíqua
Uma linguagem ubíqua é uma linguagem única falada por todos os
envolvidos no projeto, de forma que a todo momento possa-se conversar sobre o projeto
sem ter de ficar traduzindo o que está sendo falado
26. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
Objetos de Valor não tem valor direto ao negócio, e por isto
não possuem uma identidade.
Cliente
Nome
CPF
Telefone
Endereco
Usados como estrutura de
dados apenas para armazenar
valores.
Muito usados para
transporte de dados ou
composição de
objetos.
Logradouro
Numero
Bairro
etc
etc
32. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
Meu Negócio:
Locar Filmes
Locar
Filme
Reservar
Filme
Cadastrar
Cliente
Pesquisar
Filme
Etc...
Serviços na visão do DDD consiste em um objeto que visa resolver
problemas do domínio
34. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
Muitas vezes criar um novo objeto para atender a um aspecto do
domínio envolve a instanciação de diversas entidades, agregações e
composições.
Quando isto se faz necessário não o fazemos dentro do
construtor da classe, passamos esta responsabilidade para
uma fábrica.
Outras vezes pode ser necessário decidir entre valores de
inicialização padrão ou mesmo da especialização da classe.
38. Domain-Driven Design
Introdução ao
@CharlesFortes
.com
Concluindo...
Defina uma linguagem única, expresse o negócio do cliente de forma clara e
certifique-se que TODOS falam a mesma língua.
Implemente de forma que o código traduza de forma analítica o que está foi
modelado, para que daqui a 20 anos, quando o estagiário for mexer no fonte,
ele saiba do que se trata, e se não souber, pode consultar ao productOwner
sem problemas.
E lembre-se do princípio de fazer simples, refatorar e melhorar sempre.