DDD e Rails
-
Upload
marcelo-brandao-theodoro-junior -
Category
Software
-
view
159 -
download
0
Transcript of DDD e Rails
![Page 1: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/1.jpg)
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
![Page 2: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/2.jpg)
AGENDA
▫︎O domínio do Capcom
▫︎O problema em utilizar frameworks
▫︎Domain-driven Design
▫︎Desafios que encontramos
2
![Page 3: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/3.jpg)
O DOMÍNIO DO CAPCOM
3
![Page 4: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/4.jpg)
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
![Page 5: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/5.jpg)
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.
![Page 6: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/6.jpg)
QUE AÇÕES O DOMÍNIO DE AMORTIZAÇÕES FAZ?
6
Qual parece mais adequado?
![Page 7: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/7.jpg)
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
![Page 8: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/8.jpg)
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
![Page 9: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/9.jpg)
DOMAIN-DRIVEN DESIGN
9
![Page 10: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/10.jpg)
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.
![Page 11: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/11.jpg)
11
Separe o sistema em camadas, mantendo a coesão e criando
dependência somente com as camadas inferiores
![Page 12: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/12.jpg)
ARQUITETURA EM CEBOLA
12
![Page 13: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/13.jpg)
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
![Page 14: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/14.jpg)
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
![Page 15: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/15.jpg)
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
![Page 16: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/16.jpg)
AGREGAÇÕES
16
![Page 17: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/17.jpg)
FACTORIES
Responsável por criar instâncias de objetos complexos ou agregações
17
![Page 18: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/18.jpg)
REPOSITÓRIOS
Responsável por buscar informações de dependências externas ao domínio
Banco de dados, APIs, Arquivos, Sockets…
18
![Page 19: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/19.jpg)
REPOSITÓRIOS
19
![Page 20: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/20.jpg)
SERVIÇOS
Encapsula operações ou processos de negócio
20
![Page 21: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/21.jpg)
BOUNDED CONTEXT
Subsistemas/subdomínios que representam contextos específicos e bem definidos.
21
Fonte: http://martinfowler.com/bliki/BoundedContext.html
![Page 22: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/22.jpg)
BOUNDED CONTEXT
22
![Page 23: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/23.jpg)
BOUNDED CONTEXT
23
![Page 24: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/24.jpg)
DESAFIOS
Separar as entidades de domínio dos Rails Models: Repositórios e Adaptadores
24
![Page 25: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/25.jpg)
DESAFIOS
25
![Page 26: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/26.jpg)
BOUNDED CONTEXT
26
Organizar o código dentro de um bounded context? Por comportamentos.
![Page 27: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/27.jpg)
DESAFIOS
Criar visões que tocam várias partes do domínio: Views
27
![Page 28: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/28.jpg)
DESAFIOS
28
![Page 29: DDD e Rails](https://reader030.fdocument.pub/reader030/viewer/2022012406/587179fb1a28ab230b8b5d2b/html5/thumbnails/29.jpg)
DESAFIOS
Refatorações para manter o codebase coerente com o conhecimento do domínio
Ater-se as disciplinas do DDD
29