SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Projetando uma
Arquitetura
Expressiva
Olar
@brunodasneves
brunonm@gmail.com
Eu sou o
Bruno Neves
Agenda
Problemas
Sintomas e problemas
comuns no sistemas atuais.
Domínio
Cuidados para termos um
modelo rico e expressivo.
Serviços
Padrões para organizar a
service layer.
Eventos
Ou, como desacoplar nossas
unidades.
Filas
Ir além do PHP, permitindo
rotinas assíncronas, micro
serviços e mais.
API
Como trazer a linguagem
negocial até as fronteiras da
aplicação.
Disclaimer
Essa talk NÃO é exatamente sobre
▣ DDD
▣ Hexagonal/Clean/Onion/Scream Architecture
▣ CQRS
▣ AMQP
▣ Zend Expressive
Ou seja, nem todos os exemplos seguirão
completamente todos os princípios desses
padrões, modelos e metodologias.
Problemas
Problemas
CRUD
Tudo gira em
torno de SELECT,
INSERT, UPDATE
e DELETE. São
planilhas de Excel
com esteróides.
Frequentemente
os fluxos estão
nas cabeças dos
usuários.
Modelo Anêmico
Comportamento
fora do domínio,
habitando em
rotinas
procedurais
geralmente
dentro de
serviços.
Problemas
CRUD
Tudo gira em
torno de SELECT,
INSERT, UPDATE
e DELETE. São
planilhas de Excel
com esteróides.
Frequentemente
os fluxos estão
nas cabeças dos
usuários.
Spaghetti
Código com
baixíssima
coesão, sem
estrutura
definida.
Modelo Anêmico
Comportamento
fora do domínio,
habitando em
rotinas
procedurais
geralmente
dentro de
serviços.
Problemas
CRUD
Tudo gira em
torno de SELECT,
INSERT, UPDATE
e DELETE. São
planilhas de Excel
com esteróides.
Frequentemente
os fluxos estão
nas cabeças dos
usuários.
‘’
Martin Fowler
In essence the problem
with anemic domain
models is that they
incur all of the costs of
a domain model,
without yielding any of
the benefits.
Problemas
Impedance Mismatch
Assim como os problemas que os ORM's
sofrem para resolver com bancos
relacionais, não é natural encaixar
linguagem de negócio, rica por natureza,
dentro de limitados verbos HTTP.
Case
That Book
Aplicação que permite encontrar oportunidades
para troca de livros.
Use cases
▣ Catalogar livro
▣ Registrar novo leitor
▣ Registrar livro do leitor
▣ Registrar livro desejado pelo leitor
▣ Notificar oportunidades existentes
Estratégias
Do grego strateegia.
1.
Domínio
Começar pelo
coração.
Comportamento
Entidades, models,
aggregates, value
objects, devem ter
comportamento.
Getter e setters
desordenados
quebram o
encapsulamento.
Domínio
Comportamento
Entidades, models,
aggregates, value
objects, devem ter
comportamento.
Getter e setters
desordenados
quebram o
encapsulamento.
Domínio
Linguagem ubíqua
Negócio e software
devem falar a mesma
língua, usar os mesmos
termos.
Tell, don't ask.
2.
Serviços
Cardápio de
operações da
aplicação.
Service Layer
Fachada de operações
que a aplicação faz.
Porta de entrada para
o domínio do sistema,
orquestrando e
delegando atividades.
Serviços
Service Layer
Fachada de operações
que a aplicação faz.
Porta de entrada para
o domínio do sistema,
orquestrando e
delegando atividades.
Serviços
Command Bus
Pattern que utiliza
mensagens
imperativas para
representar as ações
dos usuários. Utiliza
middlewares para
decorar o
comportamento.
Command Bus
https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/01/1453218740command-pattern.png
Command Bus
https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/01/1453218734middleware-pipeline.png
Command
Command Handler
CQRS
Padrão arquitetural, derivado do
CQS, que separa a aplicação em
dois modelos: escrita e leitura.
Permite solucionar de forma
específica problemas diferentes.
Não é bala de prata, deve ser usado
quando agregar valor.
Serviços
CQRS
http://www.ouarzy.com/wp-content/uploads/2016/09/cqsr_pattern.png
3.
Eventos
Notícias do
sistema.
Acontecimentos
registrados no passado
que carregam
informações do
ocorrido. Permitem
desacoplar unidades
do sistema.
Eventos
Listeners e
Subscribers
Escutam e reagem aos
eventos, iniciando
novas rotinas.
Acontecimentos
registrados no passado
que carregam
informações do
ocorrido. Permitem
desacoplar unidades
do sistema.
Eventos
Evento
Subscriber
Recorder
Grava os eventos que
ocorreram com o
objetivo de
posteriormente
entregá-los para o
Event Dispatcher, caso
tudo ocorra bem
(transação).
Eventos
Recorder
Grava os eventos que
ocorreram com o
objetivo de
posteriormente
entregá-los para o
Event Dispatcher, caso
tudo ocorra bem
(transação).
Event Dispatcher
Notifica as partes
interessadas sobre os
eventos ocorridos no
sistema.
Eventos
Event Recorder
Event Recorder
Release Recorded Events Middleware
4.
Filas
Indo além do
PHP.
Async
Quando necessário,
serialize e execute
Commands em
processos isolados,
assíncronamente.
Filas
Async
Quando necessário,
serialize e execute
Commands em
processos isolados,
assíncronamente.
Evite cron-jobs
Frequentemente não
existe necessidade de
executar rotinas
periodicamente. O que
queremos é executar
rotinas fora do ciclo de
vida da requisição.
Filas
Abstract Queueable Command
Queue Middleware
Engines
RabbitMQ, Amazon
SQS, ActiveMQ,
ZeroMQ...
Filas
Engines
RabbitMQ, Amazon
SQS, ActiveMQ,
ZeroMQ...
Consumers
Fazem o bind na fila,
escutam as
mensagens e reagem.
Ferramentas como
Supervisord são
essenciais para
garantir confiabilidade.
Filas
https://github.com/LongRunning/LongRunning
5.
API
Janela para o
mundo.
‘’
François Zaninotto
That's also because of
the emphasis that
GraphQL puts on the
schema… forcing
frontend and backend
devs to speak about the
important things early.
GraphQL
Especificação criada
pelo Facebook para
criação de API's.
Fortemente tipada.
Permite representar as
operações do sistema
com precisão no
schema.
API
Schema
Ao contrário do REST
(verbos HTTP), o
GraphQL deixa a cargo
do dev a definição dos
nomes da ações de
escrita (mutations) e
consultas (queries) do
sistema.
GraphQL
Especificação criada
pelo Facebook para
criação de API's.
Fortemente tipada.
Permite representar as
operações do sistema
com precisão no
schema.
API
Mutations Commands
overblog/GraphQLBundle - Expression Language
The big picture
Showtime
https://github.com/brunonm/expressive-architectur
e
Agradecimento
Um salve especial para os meus amigos que
participaram ativamente nessa jornada.
▣ Leonn Leite
▣ Ciro Vargas
▣ Marcelo Rodrigues
Valeu!
dúvidas?
@brunodasneves
brunonm@gmail.com

Mais conteúdo relacionado

Semelhante a Projetando uma Arquitetura Expressiva

Lync Server 2010 - Arquitetura
Lync Server 2010 - ArquiteturaLync Server 2010 - Arquitetura
Lync Server 2010 - Arquiteturabrunoestrozi
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devopsDiego Pacheco
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de MicroservicesDeep Tech Brasil
 
Mercado de trabalho
Mercado de trabalhoMercado de trabalho
Mercado de trabalhomentrixmax
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Php Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsPhp Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsWildtech
 
Escalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizadosEscalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizadosClaudio Eckert
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_jsgustavobeavis
 
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...WeOp - The Operations Summit
 
Clean architecture frontend
Clean architecture frontendClean architecture frontend
Clean architecture frontendEvelise Vazquez
 
Apresentacao SCCI_ACCER - Processo
Apresentacao SCCI_ACCER - ProcessoApresentacao SCCI_ACCER - Processo
Apresentacao SCCI_ACCER - Processoaccer-scci
 
modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4spawally
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componenteselliando dias
 
ApresentaçãO Metodologia
ApresentaçãO MetodologiaApresentaçãO Metodologia
ApresentaçãO MetodologiaMarcos Yonamine
 
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Lenin Abadie
 

Semelhante a Projetando uma Arquitetura Expressiva (20)

Lync Server 2010 - Arquitetura
Lync Server 2010 - ArquiteturaLync Server 2010 - Arquitetura
Lync Server 2010 - Arquitetura
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
Mercado de trabalho
Mercado de trabalhoMercado de trabalho
Mercado de trabalho
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Php Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsPhp Conf08 Enterprise Patterns
Php Conf08 Enterprise Patterns
 
Escalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizadosEscalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizados
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
 
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
 
Agr introducao
Agr introducaoAgr introducao
Agr introducao
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
Clean architecture frontend
Clean architecture frontendClean architecture frontend
Clean architecture frontend
 
Apostila oracle
Apostila oracleApostila oracle
Apostila oracle
 
Apresentacao SCCI_ACCER - Processo
Apresentacao SCCI_ACCER - ProcessoApresentacao SCCI_ACCER - Processo
Apresentacao SCCI_ACCER - Processo
 
modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4
 
Architecture performance using micro services
Architecture performance using micro servicesArchitecture performance using micro services
Architecture performance using micro services
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
 
ApresentaçãO Metodologia
ApresentaçãO MetodologiaApresentaçãO Metodologia
ApresentaçãO Metodologia
 
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
 

Projetando uma Arquitetura Expressiva