SlideShare a Scribd company logo
1 of 52
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
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
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
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
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?
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
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

More Related Content

Similar to Como construir software altamente eficiente com CQRS

Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...Danilo Pereira De Luca
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Marcus Garcia
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvemAdriano Bertucci
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
Treinamento sol virtualização
Treinamento sol   virtualizaçãoTreinamento sol   virtualização
Treinamento sol virtualizaçãoAnderson Lago
 
Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?brunorroda
 
Os 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPOs 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPIssac Nolis Ohasi
 
Especificação de plataforma DaaS para laboratórios de informática
Especificação de plataforma DaaS para laboratórios de informática Especificação de plataforma DaaS para laboratórios de informática
Especificação de plataforma DaaS para laboratórios de informática Demis Gomes
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devopsDiego Pacheco
 
Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito Anderson Silveira
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013André Borgonovo
 
Banco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possívelBanco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possívelMarcos Freccia
 
Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1) Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1) Marcus Garcia
 
Institucional 2016 premier it
Institucional 2016 premier it Institucional 2016 premier it
Institucional 2016 premier it Jorge Biesczad Jr.
 
XP como aliado para conter a complexidade de um monolito de mais de 15 anos
XP como aliado para conter a complexidade de um monolito de mais de 15 anosXP como aliado para conter a complexidade de um monolito de mais de 15 anos
XP como aliado para conter a complexidade de um monolito de mais de 15 anosAnderson Silveira
 
Desafio de crescer
Desafio de crescerDesafio de crescer
Desafio de crescerGuilherme
 

Similar to Como construir software altamente eficiente com CQRS (20)

Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvem
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Treinamento sol virtualização
Treinamento sol   virtualizaçãoTreinamento sol   virtualização
Treinamento sol virtualização
 
Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?
 
Os 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPOs 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAP
 
Especificação de plataforma DaaS para laboratórios de informática
Especificação de plataforma DaaS para laboratórios de informática Especificação de plataforma DaaS para laboratórios de informática
Especificação de plataforma DaaS para laboratórios de informática
 
Ganhando produtividade com Oracle Process Cloud Services
Ganhando produtividade com Oracle Process Cloud ServicesGanhando produtividade com Oracle Process Cloud Services
Ganhando produtividade com Oracle Process Cloud Services
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito
 
Front end architecture
Front end architectureFront end architecture
Front end architecture
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Banco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possívelBanco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possível
 
Dba Ciclo Palestra P5 V1a
Dba Ciclo Palestra P5 V1aDba Ciclo Palestra P5 V1a
Dba Ciclo Palestra P5 V1a
 
Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1) Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1)
 
Institucional 2016 premier it
Institucional 2016 premier it Institucional 2016 premier it
Institucional 2016 premier it
 
XP como aliado para conter a complexidade de um monolito de mais de 15 anos
XP como aliado para conter a complexidade de um monolito de mais de 15 anosXP como aliado para conter a complexidade de um monolito de mais de 15 anos
XP como aliado para conter a complexidade de um monolito de mais de 15 anos
 
Desafio de crescer
Desafio de crescerDesafio de crescer
Desafio de crescer
 

Como construir software altamente eficiente com CQRS

Editor's Notes

  1. Estes patrocinadores oferecem goodies
  2. 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
  3. 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/