3. 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.
5. 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.
7. 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.
8. 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.
9. 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.
10. ‘’
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.
11. 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.
13. 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
20. 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
21. 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.
26. 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
30. 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
33. Recorder
Grava os eventos que
ocorreram com o
objetivo de
posteriormente
entregá-los para o
Event Dispatcher, caso
tudo ocorra bem
(transação).
Eventos
34. 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
40. 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
47. ‘’
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.
49. 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