Académique Documents
Professionnel Documents
Culture Documents
@camposmilaa
Camila Campos
Desenvolvedora na Creditas
Organizadora do Rails Girls
Organizadora do Women Dev Summit
@camposmilaa
Plataforma online
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
bit.ly/InscricoesWDSTalks
bit.ly/VakinhaWDSTalks
womendevsummit.com
fb.com/womendevsummit
@camposmilaa
Arquitetura Hexagonal
@camposmilaa
disclaimers*
@camposmilaa
1.
eu sou béqui endi
@camposmilaa
2.
eu menti
@camposmilaa
Arquitetura Hexagonal
@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/
Clean Architecture: A Craftsman's Guide to Software Structure and Design by Uncle Bob (Livro)
@camposmilaa