SlideShare uma empresa Scribd logo
Como construir software altamente
eficiente com CQRS
Guilherme Ferreira
http://netponto.org12ª Reunião Presencial no Porto 17/09/2016
Guilherme Ferreira
• http://gsferreira.com
• @gsferreira
CQRS
Command Query Responsibility Segregation
Disclaimer
Como construir software altamente eficiente com CQRS
CQRS CommandQuery
Event Sourcing
Async Processing
Messaging
Cache
Queue
Service Bus
Task Oriented
Eventual Consistency
Novo projeto!
Data Layer
Business Layer
Service Layer
Presentation Layer
DB
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
Command–query separation (CQS)
• Eiffel por Bertrand Meyer
• “… asking a question should not change the answer…”
CQS na prática
Altera o
estado
Retorna um
valor sem ter
impactos no
estado
CQS na prática
CQRS é…
• Abordagem
• Conjunto de práticas comuns
• Domínio Colaborativo
• Single Responsibility
• Workload Managment
• Mais leituras do que escritas
• Software de fácil manutenção a longo prazo
• Eficiência!
CQRS não é…
• Um padrão
• Uma receita
• “Don’t write a CQRS framework” by Greg Young
CQRS = CQS em grande escala
Como construir software altamente eficiente com CQRS
CQRS CommandQuery
Event Sourcing
Async Processing
Messaging
Cache
Queue
Service Bus
Task Oriented
Eventual Consistency
Query Side
Layered Architecture
Data Layer
Business Layer
Service Layer
Presentation Layer
DB
Command
Query
KISS
Keep It Simple, Stupid
“Simple code is fast code” Udi Dahan
Layered Architecture
View Model Data Layer
Business Layer
Service Layer
DB
Presentation Layer
Command
Query
Base de Dados
• “Transações ACID são para bases de dados e não para sistemas” by
Paulo Gandra de Sousa
• 3ª Forma Normal
• Mas as Listagens não estão na 3FN
• ORM
• Será mesmo preciso?
Base de Dados
• View Model
• Tabelas simples, desnormalizadas
• O mundo não é só SQL
• Single source of truth is dead
• Cache
• Cache de Entidades vs Cache de Views
Eventual Consistency
• Dados não precisam de ser consistentes em todos os momentos
• Eventual Consistency !== Dados errados
• Stale data/Dados antigos
• Dados datados
Query Side: Resumindo…
• Não precisas de muito para começar
• Keep it Simple
• É uma cache e não uma BD
Command Side
O que são Comandos?
• Regista a intenção do utilizador
• Nome no imperativo
• Pré-validação
• Business Rules
• Taxa de sucesso elevada
• Gere o Domain Model
Task Based UI
• Utilizadores não pensam em “modo CRUD”
• Captura a intenção do utilizador
• Uma página = Uma tarefa principal
Task Based UI
Processamento assíncrono
• Separar a receção do comando do seu tratamento
• Gestão de workload
• Queue / Service Bus
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
Comandos: Resumindo
• Registam a intenção do utilizador
• Elevada taxa de sucesso
• Task Based UI
• Impactos no negócio
Event Sourcing
O que é o Event Sourcing?
• O que mudou e quando mudou
• Nomes no passado
• Não há deletes
• View Model atualizado por eventos
• Eventos gerados pelos comandos
• Por oposição a Cache Invalidation
• Permite reprocessamento/playing back
Eventos
Workshop
Created
Price
Added
Location
Added
Workshop
Published
Event Sourcing Architecture
View Model Data Layer
Business Layer
Service Layer
DB
Presentation Layer
Command
Query
Cache EventHandlers
Event Sourcing: Resumindo…
• O que aconteceu e quando aconteceu
• Permite um Audit Trail de tudo o que aconteceu no sistema
• Atualiza o View Model
Overengineering?
Como construir software altamente eficiente com CQRS
Bounded Contexts
• Dividir um grande sistema em pequenas partes
• Domain Model independente
• Comunica com outros Bounded Contexts através de Eventos
• CQRS só nos Bounded Contexts em que precisas
• Não te lembra nada?
• Micro Serviços
Como construir software altamente eficiente com CQRS
Resumindo…
1. Keep It Simple, start simple.
2. Escolhe um Domínio Colaborativo
• CQRS não é “Tudo ou Nada”
3. Separa as Queries dos Comandos
4. Simplifica o teu Query Side
Resumindo…
5. Implementa uma Base de Dados para o teu View Model
6. Captura a intenção do teu utilizador
7. Gere a carga de trabalho com processamento assíncrono
8. Implementa Event Sourcing
9. Evangeliza o negócio
Questões?
@gsferreira
https://gsferreira.com
Patrocinadores “GOLD”
Patrocinadores “Silver”
Patrocinadores “Bronze”
http://bit.ly/netponto-aval-po-12
* Para quem não puder preencher durante a reunião,
iremos enviar um email com o link à tarde

Mais conteúdo relacionado

PPTX
Migrando Aplicações Legadas para Nuvem
PDF
MSA: Quando a gestão encontra a arquitetura
PDF
Palestra Torquebox - JUDCON SP 2013
PDF
Apresentação da monografia - PRONTO
PPTX
Migrando Aplicações legadas para o Microsoft Azure
PPTX
Play framework
PDF
Uma introdução à SRE - Site reliability engineering
PPTX
ASP.NET MVC, para sua vida melhorar
Migrando Aplicações Legadas para Nuvem
MSA: Quando a gestão encontra a arquitetura
Palestra Torquebox - JUDCON SP 2013
Apresentação da monografia - PRONTO
Migrando Aplicações legadas para o Microsoft Azure
Play framework
Uma introdução à SRE - Site reliability engineering
ASP.NET MVC, para sua vida melhorar

Semelhante a Como construir software altamente eficiente com CQRS (20)

PPTX
Domain-Driven Design
PPTX
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
PDF
PPTX
Produzindo e consumindo um stream de eventos
PPTX
Arquitetura de Software e o DNAD2013
PDF
Projetando uma Arquitetura Expressiva
PDF
Escalando aplicações utilizando o padrão CQRS
PDF
Desenvolvimento Client-Side 2016 (BrazilJS)
PPTX
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
PDF
Capitulo 02 sommerville
PDF
TCC - Engenharia de Software Baseada em Componentes
PDF
Event Sourcing e CQRS
PPTX
Introdução à Engenharia de Software e UML
PDF
Arquitetura Orientada a Eventos
PPT
Análise e Design Orientado a Objetos.ppt
PDF
Domain Driven Design com Python
PDF
Beyond Ruby with NodeJS - RubyConf Brasil 2010
PDF
Caelum java-testes-jsf-web-services-design-patterns-fj22
PDF
Modelos e Padrões de Engenharia de Software
PDF
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
Domain-Driven Design
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Produzindo e consumindo um stream de eventos
Arquitetura de Software e o DNAD2013
Projetando uma Arquitetura Expressiva
Escalando aplicações utilizando o padrão CQRS
Desenvolvimento Client-Side 2016 (BrazilJS)
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
Capitulo 02 sommerville
TCC - Engenharia de Software Baseada em Componentes
Event Sourcing e CQRS
Introdução à Engenharia de Software e UML
Arquitetura Orientada a Eventos
Análise e Design Orientado a Objetos.ppt
Domain Driven Design com Python
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Caelum java-testes-jsf-web-services-design-patterns-fj22
Modelos e Padrões de Engenharia de Software
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
Anúncio

Último (12)

PDF
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
PPT
00_Apresentacao sobre o livro do sommerville_ES.ppt
PPT
07_slides de Estilos_Arquiteturais sommerville.ppt
PPT
03_slide de Gerenciamento de Projetos .ppt
PDF
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
PDF
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
PPT
10_ slides de Reuso sommerville cap 10.ppt
PDF
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
PPT
05_slide especificacao de sistemas de software e a uml UML.ppt
PPT
06_slide de Arquitetura_de_Software .ppt
PPT
09_Evolucao de software e_Refatoracao.ppt
PDF
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
00_Apresentacao sobre o livro do sommerville_ES.ppt
07_slides de Estilos_Arquiteturais sommerville.ppt
03_slide de Gerenciamento de Projetos .ppt
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
10_ slides de Reuso sommerville cap 10.ppt
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
05_slide especificacao de sistemas de software e a uml UML.ppt
06_slide de Arquitetura_de_Software .ppt
09_Evolucao de software e_Refatoracao.ppt
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
Anúncio

Como construir software altamente eficiente com CQRS

Notas do Editor

  • #51: Estes patrocinadores oferecem goodies
  • #52: Survs ajuda com os inqueritos e Nucleo de Estudantes de Informática do ISEP que nos ajudaram e apoiaram na divulgação e na organização
  • #53: Para quem puder ir preenchendo, assim não chateio mais logo  É importante para recebermos nós feedback, e para darmos feedback aos nossos oradores http://goqr.me/