SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
Event Sourcing
CQRS
Quais problemas eles resolvem?
Quem sou eu
● Cristiano Raffi Cunha
Quem sou eu
● Cristiano Raffi Cunha
● Desenvolvedor .NET
O que vai rolar
● O que é Event Sourcing?
● CQRS ajuda no quê?
● Quando usar esses conceitos?
Um sistema de conta bancária
Como manter o histórico das transações?
Segurança - Não aparecer nem sumir R$?
Geralmente sobrescrevemo os valores, guardamos os estados
E se atualizar o saldo da forma errada?
Aí vem a ideia de
Event Sourcing
(No meu problema*)
Guardar Eventos no banco
Guardar Eventos no banco
Guardar Eventos no banco
Guardar Eventos no banco
Guardar Eventos no banco
Guardar Eventos no banco
NÃO podemos alterar eventos
E se precisar ver o saldo?
Situação atual é a soma dos Eventos
Precisamos calcular tudo...
Computacionalmente muito caro!
Snapshot
Snapshot CQRS
Snapshot
Snapshot
Snapshot
Snapshot
Snapshot
Snapshot
Snapshot
$375,00
CQRS - Command Query Responsibility Segregation
CQRS - Não depende de ES!
CQRS
CQRS
CQRS - Duas fontes de dados
CQRS - Papel
E se apagar o cache?
O QUE GANHAMOS?
● Segurança
● Auditoria
● Saber estado da entidade em qualquer ponto na linha do tempo
● Acompanhar em tempo real os eventos no seu produto
● Saber sobre o comportamento do usuário
O QUE PERDEMOS?
● Dificuldade de mapear o mundo real
● Visibilidade dos dados de relatórios
● Dificuldade para mudanças no domínio(dados históricos)
● Alto consumo de infra
● Consistência eventual(CQRS)
● ...
O que eu acho?
Bora ver um pouco de código
Fluxo
Event Store DB
Pode ser aplicada em outros mudos
Conteúdos legais
● Snapshotting Strategies
● CodeOpinion - Youtube
● Pisani da ArcH - Youtube
● Building Event-Driven Microservices
CRISTIANOPROGRAMADOR.COM
Obrigado!

Mais conteúdo relacionado

Mais de Cristiano Cunha

Documentação profissional com C4 Model - GDG Dev Fest 2023
Documentação profissional com C4 Model - GDG Dev Fest  2023Documentação profissional com C4 Model - GDG Dev Fest  2023
Documentação profissional com C4 Model - GDG Dev Fest 2023Cristiano Cunha
 
Redis e Estratégias Cache Distribuído
Redis e Estratégias Cache DistribuídoRedis e Estratégias Cache Distribuído
Redis e Estratégias Cache DistribuídoCristiano Cunha
 
Dicas de oratória para apresentações
Dicas de oratória para apresentaçõesDicas de oratória para apresentações
Dicas de oratória para apresentaçõesCristiano Cunha
 
Introdução a Mensageria com RabbitMQ
Introdução a Mensageria com RabbitMQIntrodução a Mensageria com RabbitMQ
Introdução a Mensageria com RabbitMQCristiano Cunha
 
Estrategias de Cache Distribuidos com Redis
Estrategias de Cache Distribuidos com RedisEstrategias de Cache Distribuidos com Redis
Estrategias de Cache Distribuidos com RedisCristiano Cunha
 
Programacao para nao programadores
Programacao para nao programadoresProgramacao para nao programadores
Programacao para nao programadoresCristiano Cunha
 
Docker para quem tem preguica
Docker para quem tem preguicaDocker para quem tem preguica
Docker para quem tem preguicaCristiano Cunha
 
Uma maravilha chamada vue.js
Uma maravilha chamada vue.jsUma maravilha chamada vue.js
Uma maravilha chamada vue.jsCristiano Cunha
 
Seguranca para desenvolvedores
Seguranca para desenvolvedoresSeguranca para desenvolvedores
Seguranca para desenvolvedoresCristiano Cunha
 
Boas praticas - Muito além de linhas de código
Boas praticas - Muito além de linhas de códigoBoas praticas - Muito além de linhas de código
Boas praticas - Muito além de linhas de códigoCristiano Cunha
 
Da para trabalhar com c# no linux?
Da para trabalhar com c# no linux?Da para trabalhar com c# no linux?
Da para trabalhar com c# no linux?Cristiano Cunha
 

Mais de Cristiano Cunha (20)

Documentação profissional com C4 Model - GDG Dev Fest 2023
Documentação profissional com C4 Model - GDG Dev Fest  2023Documentação profissional com C4 Model - GDG Dev Fest  2023
Documentação profissional com C4 Model - GDG Dev Fest 2023
 
C4 Model
C4 ModelC4 Model
C4 Model
 
Redis e Estratégias Cache Distribuído
Redis e Estratégias Cache DistribuídoRedis e Estratégias Cache Distribuído
Redis e Estratégias Cache Distribuído
 
SOLID na Vida Real
SOLID na Vida RealSOLID na Vida Real
SOLID na Vida Real
 
Dicas de oratória para apresentações
Dicas de oratória para apresentaçõesDicas de oratória para apresentações
Dicas de oratória para apresentações
 
Introdução a Mensageria com RabbitMQ
Introdução a Mensageria com RabbitMQIntrodução a Mensageria com RabbitMQ
Introdução a Mensageria com RabbitMQ
 
Bancos De Dados NoSQL
Bancos De Dados NoSQLBancos De Dados NoSQL
Bancos De Dados NoSQL
 
Estrategias de Cache Distribuidos com Redis
Estrategias de Cache Distribuidos com RedisEstrategias de Cache Distribuidos com Redis
Estrategias de Cache Distribuidos com Redis
 
OTP - One Time Password
OTP - One Time PasswordOTP - One Time Password
OTP - One Time Password
 
Systemas Distribuídos
Systemas DistribuídosSystemas Distribuídos
Systemas Distribuídos
 
Cultura de testes
Cultura de testesCultura de testes
Cultura de testes
 
Git alem do basico
Git alem do basicoGit alem do basico
Git alem do basico
 
Programacao para nao programadores
Programacao para nao programadoresProgramacao para nao programadores
Programacao para nao programadores
 
Docker para quem tem preguica
Docker para quem tem preguicaDocker para quem tem preguica
Docker para quem tem preguica
 
Uma maravilha chamada vue.js
Uma maravilha chamada vue.jsUma maravilha chamada vue.js
Uma maravilha chamada vue.js
 
Seguranca para desenvolvedores
Seguranca para desenvolvedoresSeguranca para desenvolvedores
Seguranca para desenvolvedores
 
Git Além do básico
Git Além do básicoGit Além do básico
Git Além do básico
 
Boas praticas - Muito além de linhas de código
Boas praticas - Muito além de linhas de códigoBoas praticas - Muito além de linhas de código
Boas praticas - Muito além de linhas de código
 
Da para trabalhar com c# no linux?
Da para trabalhar com c# no linux?Da para trabalhar com c# no linux?
Da para trabalhar com c# no linux?
 
Testes unitários
Testes unitáriosTestes unitários
Testes unitários
 

Último

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

Event Sourcing e CQRS