Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Como construir software altamente
eficiente com CQRS
Guilherme Ferreira
http://netponto.org12ª Reunião Presencial no Porto...
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
• Ma...
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
•...
Base de Dados
• View Model
• Tabelas simples, desnormalizadas
• O mundo não é só SQL
• Single source of truth is dead
• Ca...
Eventual Consistency
• Dados não precisam de ser consistentes em todos os momentos
• Eventual Consistency !== Dados errado...
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 suc...
Task Based UI
• Utilizadores não pensam em “modo CRUD”
• Captura a intenção do utilizador
• Uma página = Uma tarefa princi...
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 eve...
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 E...
Event Sourcing: Resumindo…
• O que aconteceu e quando aconteceu
• Permite um Audit Trail de tudo o que aconteceu no sistem...
Overengineering?
Bounded Contexts
• Dividir um grande sistema em pequenas partes
• Domain Model independente
• Comunica com outros Bounded ...
Resumindo…
1. Keep It Simple, start simple.
2. Escolhe um Domínio Colaborativo
• CQRS não é “Tudo ou Nada”
3. Separa as Qu...
Resumindo…
5. Implementa uma Base de Dados para o teu View Model
6. Captura a intenção do teu utilizador
7. Gere a carga d...
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 à t...
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
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
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
Upcoming SlideShare
Loading in …5
×

Como construir software altamente eficiente com CQRS

160 views

Published on

CQRS (Command Query Responsibility Segregation) é uma abordagem para construir software altamente eficiente, escalável e de fácil manutenção. No entanto, os primeiros passos neste conceito não são fáceis.
DDD, Event Sourcing, Cache, Eventual Consistency ou Service Bus são apenas alguns exemplos de conceitos que nos são sugeridos sempre que pesquisamos sobre CQRS. Toda esta avalanche de informação contribui para que seja difícil adotar este conceito.
Mas CQRS será realmente tudo isto? É preciso dominar todos estes conceitos para o implementar?
Esta sessão vai ajudar-te a encontrar uma resposta para estas perguntas, a ter uma noção mais clara de quando se aplica e de como podes dar os primeiros passos para implementar este principio.

Published in: Software
  • Be the first to comment

Como construir software altamente eficiente com CQRS

  1. 1. Como construir software altamente eficiente com CQRS Guilherme Ferreira http://netponto.org12ª Reunião Presencial no Porto 17/09/2016
  2. 2. Guilherme Ferreira • http://gsferreira.com • @gsferreira
  3. 3. CQRS Command Query Responsibility Segregation
  4. 4. Disclaimer
  5. 5. CQRS CommandQuery Event Sourcing Async Processing Messaging Cache Queue Service Bus Task Oriented Eventual Consistency
  6. 6. Novo projeto! Data Layer Business Layer Service Layer Presentation Layer DB
  7. 7. Command–query separation (CQS) • Eiffel por Bertrand Meyer • “… asking a question should not change the answer…”
  8. 8. CQS na prática Altera o estado Retorna um valor sem ter impactos no estado
  9. 9. CQS na prática
  10. 10. 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!
  11. 11. CQRS não é… • Um padrão • Uma receita • “Don’t write a CQRS framework” by Greg Young
  12. 12. CQRS = CQS em grande escala
  13. 13. CQRS CommandQuery Event Sourcing Async Processing Messaging Cache Queue Service Bus Task Oriented Eventual Consistency
  14. 14. Query Side
  15. 15. Layered Architecture Data Layer Business Layer Service Layer Presentation Layer DB Command Query
  16. 16. KISS Keep It Simple, Stupid “Simple code is fast code” Udi Dahan
  17. 17. Layered Architecture View Model Data Layer Business Layer Service Layer DB Presentation Layer Command Query
  18. 18. 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?
  19. 19. 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
  20. 20. Eventual Consistency • Dados não precisam de ser consistentes em todos os momentos • Eventual Consistency !== Dados errados • Stale data/Dados antigos • Dados datados
  21. 21. Query Side: Resumindo… • Não precisas de muito para começar • Keep it Simple • É uma cache e não uma BD
  22. 22. Command Side
  23. 23. 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
  24. 24. Task Based UI • Utilizadores não pensam em “modo CRUD” • Captura a intenção do utilizador • Uma página = Uma tarefa principal
  25. 25. Task Based UI
  26. 26. Processamento assíncrono • Separar a receção do comando do seu tratamento • Gestão de workload • Queue / Service Bus
  27. 27. Comandos: Resumindo • Registam a intenção do utilizador • Elevada taxa de sucesso • Task Based UI • Impactos no negócio
  28. 28. Event Sourcing
  29. 29. 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
  30. 30. Eventos Workshop Created Price Added Location Added Workshop Published
  31. 31. Event Sourcing Architecture View Model Data Layer Business Layer Service Layer DB Presentation Layer Command Query Cache EventHandlers
  32. 32. Event Sourcing: Resumindo… • O que aconteceu e quando aconteceu • Permite um Audit Trail de tudo o que aconteceu no sistema • Atualiza o View Model
  33. 33. Overengineering?
  34. 34. 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
  35. 35. 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
  36. 36. 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
  37. 37. Questões? @gsferreira https://gsferreira.com
  38. 38. Patrocinadores “GOLD”
  39. 39. Patrocinadores “Silver”
  40. 40. Patrocinadores “Bronze”
  41. 41. 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

×