F r e v o o n R a i l s - a b r i l / 1 6
DDD E RAILS
Implementando 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

DDD e Rails