Vous êtes sur la page 1sur 97

Arquitetura Hexagonal

de use cases até a persistência

@camposmilaa
Camila Campos
Desenvolvedora na Creditas
Organizadora do Rails Girls
Organizadora do Women Dev Summit

@camposmilaa
Plataforma online

Empréstimo com garantia

Juros baixos

ESTAMOS CONTRATANDO!!!

www.creditas.com.br

fb.com/creditasbr

twitter.com/CreditasBR

@camposmilaa
Projeto maravilhindo

Inserir mulheres em TI

Workshop de Rails

Inspiração

railsgirls.com/saopaulo

fb.com/railsgirls.sp

twitter.com/railsgirlssp

@camposmilaa
Junção de comunidades

1a edição 25/03: Oficinas

2a edição 11/11: WDSTalks

bit.ly/InscricoesWDSTalks

bit.ly/VakinhaWDSTalks

womendevsummit.com

fb.com/womendevsummit

@camposmilaa
Arquitetura Hexagonal

de use cases até a persistência

@camposmilaa
disclaimers*

@camposmilaa
1.
eu sou béqui endi

@camposmilaa
2.
eu menti

@camposmilaa
Arquitetura Hexagonal

da entrada de dados até a saída de dados

@camposmilaa
senta que lá
vem história

@camposmilaa
@camposmilaa
@camposmilaa
@camposmilaa
@camposmilaa
@camposmilaa
@camposmilaa
@camposmilaa
Por quê?

@camposmilaa
“precisamos entregar isso logo,
vai assim mesmo
que depois voltamos e arrumamos.”
- as dev tudo

@camposmilaa
“o fato é que fazer ~bagunças~ é sempre mais
devagar do que continuar ~limpo~.”
- Uncle Bob

@camposmilaa
arquitetura

@camposmilaa
arquitetura é o desenho do software

@camposmilaa
arquitetura é o desenho do software
boa arquitetura grita a intenção do software

@camposmilaa
@camposmilaa
@camposmilaa
arquitetura
hexagonal

@camposmilaa
ports
and
adapters

@camposmilaa
@camposmilaa
@camposmilaa
core
application

@camposmilaa
adapters

core
application

@camposmilaa
mundo externo
adapters

core
application

@camposmilaa
qual é a ideia?

@camposmilaa
independente de frameworks

@camposmilaa
independente de frameworks
independente de ui

@camposmilaa
independente de frameworks
independente de ui
independente de banco de dados

@camposmilaa
independente de frameworks
independente de ui
independente de banco de dados
independente de agentes externos

@camposmilaa
independente de frameworks
independente de ui
independente de banco de dados
independente de agentes externos
facilmente testável

@camposmilaa
@camposmilaa
regras do jogo

@camposmilaa
1.
respeita as camadas

@camposmilaa
mundo externo
adapters

core
application

@camposmilaa
mundo externo
adapters regras de domínio
(entidades)
regras da aplicação
core (use cases)
application

@camposmilaa
banco de dados
web mundo externo
mailers adapters
jobs assíncronos
integrações
core
application

@camposmilaa
mundo externo
adapters

core
application

controller
presenters
gateways
@camposmilaa
2.
dependências só de fora pra dentro

@camposmilaa
mundo externo
adapters

core
application

@camposmilaa
mundo externo

@camposmilaa
mundo externo

banco de
dados

@camposmilaa
mundo externo

web

@camposmilaa
mundo externo

framework

@camposmilaa
mundo externo

job
agendado

@camposmilaa
mundo externo
console

@camposmilaa
core application

@camposmilaa
@camposmilaa
linguagem ubíqua

@camposmilaa
linguagem ubíqua

cliente

@camposmilaa
linguagem ubíqua
user
cliente

@camposmilaa
linguagem ubíqua
customer
cliente

@camposmilaa
core
application

@camposmilaa
use cases

entidades

@camposmilaa
entidades - o que o sistema é
cliente
- cpf
- nome
- data de nascimento

@camposmilaa
entidades - o que o sistema é
endereço
- rua
- número
- bairro

@camposmilaa
entidades - o que o sistema é

produto
- nome
- preço

@camposmilaa
entidades - o que o sistema é
pedido
- data da compra

@camposmilaa
entidades - o que o sistema é

d or
pra
oc m

@camposmilaa
entidades - o que o sistema é

item
- quantidade
- preço

@camposmilaa
entidades - o que o sistema é

são

@camposmilaa
entidades - o que o sistema é

@camposmilaa
entidades - o que o sistema é
ADICIONAR ITEM
+ produto
+ quantidade
+ comprador

@camposmilaa
entidades - o que o sistema é
ADICIONAR ITEM
+ produto
+ quantidade
+ comprador

@camposmilaa
use cases ou interactors - o que o sistema faz
pedir
criar
reembolso

verificar
enviar risco de
fraude
@camposmilaa
criar pedido
DADOS DE ENTRADA
- dados do cliente
- endereço de entrega
- dados de pagamento
FLUXO
1. cliente pede para criar pedido com os dados acima
2. sistema valida os dados
3. sistema cria pedido e determina id do pedido
4. sistema devolve o id do pedido para o cliente
@camposmilaa
adapters

@camposmilaa
adapters
presenter
mundo externo

use case
de
fluxo e
ol
interactor
contr

controller
@camposmilaa
@camposmilaa
e a regra da
dependência?

@camposmilaa
adapters - princípio da inversão de dependência (DIP)
use case I
presenter
input port

use case
de
fluxo e
ol
interactor
contr

use case I
controler
input port
@camposmilaa
adapters - princípio da inversão de dependência (DIP)

@camposmilaa
juntando tudo

@camposmilaa
usuário
solicita
algo

@camposmilaa
usuário
json
solicita controller
algo

@camposmilaa
request
model
tradução
usuário
solicita controller
algo

@camposmilaa
Request
model
usuário
solicita controller
request
algo
model

use case
(interactor)

@camposmilaa
Request domain
model service
usuário
solicita controller entidade
algo
entidade
use case
(interactor) interação agregado

entidade entidade

@camposmilaa
Request domain
banco
model service
usuário
solicita controller repositório entidade
algo
persistência
entidade
use case
(interactor)
agregado

entidade entidade

@camposmilaa
Request domain
banco
model service
usuário
solicita controller dip repositório entidade
algo
persistência
entidade
use case
(interactor)
agregado

entidade entidade

@camposmilaa
Request domain
banco
model service
usuário
solicita controller repositório entidade
algo
entidade
use case
(interactor)
agregado
tradução
result
model entidade entidade

@camposmilaa
Request domain
banco
model service
usuário
solicita controller repositório entidade
algo
entidade
use case
result
model (interactor)
agregado
presenter
result
model entidade entidade

@camposmilaa
Request domain
banco
model service
usuário
solicita controller repositório entidade
algo
entidade
dip use case
result
model (interactor)
agregado
presenter
result
model entidade entidade

@camposmilaa
Request domain
banco
model service
usuário
solicita controller repositório entidade
algo
entidade
use case
(interactor)
usuário agregado
json
recebe presenter
algo result
model entidade entidade

@camposmilaa
last but not
least...

@camposmilaa
“o único jeito de ir rápido, é fazendo bem.”
- Uncle Bob

@camposmilaa
uncle bob

approves
@camposmilaa
Valeu Grandão!

bit.ly/intercon-hexagonal

camila.campos@creditas.com.br
@camposmilaa

@camposmilaa
Links bacanudos
https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html

https://8thlight.com/blog/uncle-bob/2011/09/30/Screaming-Architecture.html

http://alistair.cockburn.us/Hexagonal+architecture

http://blog.mattwynne.net/2012/05/31/hexagonal-rails-objects-values-and-hexagons/

https://spin.atomicobject.com/2013/02/23/ports-adapters-software-architecture/

http://five.agency/android-architecture-part-3-applying-clean-architecture-android/

http://tidyjava.com/clean-architecture-screaming/

Domain Driven Rails by Yan Pritzker https://vimeo.com/106759024

Clean Architecture by Uncle Bob https://www.youtube.com/watch?v=Nltqi7ODZTM

Clean Architecture and Desing by Uncle Bob https://www.youtube.com/watch?v=Nsjsiz2A9mg

Hexagonal Rails by Matt Wynne https://www.youtube.com/watch?v=CGN4RFkhH2M

Clean Architecture: A Craftsman's Guide to Software Structure and Design by Uncle Bob (Livro)

@camposmilaa

Vous aimerez peut-être aussi