Post on 08-Jan-2017
F r e v o o n R a i l s - a b r i l / 1 6
DDD E RAILSImplementando Domain-driven Design com Rails:
Um caso de sucesso.
Marcelo Theodoro
AGENDA
▫︎O domínio do Capcom
▫︎O problema em utilizar frameworks
▫︎Domain-driven Design
▫︎Desafios que encontramos
2
O DOMÍNIO DO CAPCOM
3
4
Frameworks tem sua própria agenda e suas próprias prioridades. Ao vincular sua aplicação a um framework, você
está sujeito às mudanças do framework.
Uncle Bob
5
O código de um sistema deve ser uma representação fiel do domínio. Se o seu
código está dentro do Rails (ou de qualquer MVC), ele não está representando o domínio.
QUE AÇÕES O DOMÍNIO DE AMORTIZAÇÕES FAZ?
6
Qual parece mais adequado?
DOMAIN-DRIVEN DESIGN
Uma abordagem para desenvolvimento de softwares complexos
Reune um conjunto de boas práticas, padrões de projeto, conceitos de SOLID e introduz uma linguagem ubíqua.
Domínio é uma área de conhecimento do negócio onde o software está inserido.
Uma linguagem comum entre negócio e desenvolvimento ■ Todas as pessoas dentro de um time falando a mesma língua
■ Sem tradução: ”o que o cliente chama de custo é o campo valor”
7
DDD - ABORDAGEM
Foco no domínio principal
Explore os modelos em conjunto com desenvolvedores e especialistas de domínio
Converse em uma linguagem comum dentro de um contexto específico
8
DOMAIN-DRIVEN DESIGN
9
10
Expresse o domínio e a lógica de negócio, eliminando a dependência
com a UI, infra-estrutura e código não relacionado ao domínio.
11
Separe o sistema em camadas, mantendo a coesão e criando
dependência somente com as camadas inferiores
ARQUITETURA EM CEBOLA
12
ENTIDADES
Um objeto distinto pela sua identidade ■ Um produto em uma loja
■ Uma nota fiscal na contabilidade
■ Uma pessoa para o governo - E por aí vai…
13
OBJETOS DE VALOR
Um objeto cuja identidade não importa Só tem importância pelos seus atributos ou por sua lógica
É um objeto imutável
■ Uma cor
■ Uma descrição
■ Uma data ou hora
■ Um endereço - E por aí vai…
14
AGREGAÇÕES
Uma combinação entre entidades e seus relacionamentos com objetos de valor dentro de um contexto
Uma agregação é tratada como uma única unidade.
Só é acessada pela sua raíz, uma entidade.
■ Pedido (itens, local de entrega, cliente, cupom de desconto)
■ Chamado/Atendimento (atendente, hora, local, comentários, tags) - E por aí vai
15
AGREGAÇÕES
16
FACTORIES
Responsável por criar instâncias de objetos complexos ou agregações
17
REPOSITÓRIOS
Responsável por buscar informações de dependências externas ao domínio
Banco de dados, APIs, Arquivos, Sockets…
18
REPOSITÓRIOS
19
SERVIÇOS
Encapsula operações ou processos de negócio
20
BOUNDED CONTEXT
Subsistemas/subdomínios que representam contextos específicos e bem definidos.
21
Fonte: http://martinfowler.com/bliki/BoundedContext.html
BOUNDED CONTEXT
22
BOUNDED CONTEXT
23
DESAFIOS
Separar as entidades de domínio dos Rails Models: Repositórios e Adaptadores
24
DESAFIOS
25
BOUNDED CONTEXT
26
Organizar o código dentro de um bounded context? Por comportamentos.
DESAFIOS
Criar visões que tocam várias partes do domínio: Views
27
DESAFIOS
28
DESAFIOS
Refatorações para manter o codebase coerente com o conhecimento do domínio
Ater-se as disciplinas do DDD
29
Perguntas?
Marcelo Theodoro marcelo.theodorojr@gmail.com
MUITO OBRIGADO