SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Globalcode – Open4education
Event Sourcing
Organizando seu Domínio em uma cadeia de Eventos
Pedro Góes
Trilha – Arquitetura .NET
Globalcode – Open4education
Agenda
Event Sourcing
Conceito
Exemplo de Problema
Funcionamento
Event Sourcing + CQRS
Projections
Globalcode – Open4education
Conceito
Entidade
Comando()
AlteraEstado()
Produto
Id: 10
Modelo: Caneta
Preço: R$ 14,00
Estoque: 9
Globalcode – Open4education
Conceito
Entidade
Comando()
AlteraEstado()
Produto
Id: 10
Modelo: Caneta
Preço: R$ 14,00
Estoque: 9
Produto Criado
Id: 10
Id: 10
Modelo: Caneta
Renomeado
Id: 10
Preço: R$ 9,00
Preço Alterado
Id: 10
Quantidade: 15
Estoque Recebido
Id: 10
Preço: R$ 14,00
Preço Alterado
Id: 10
Quantidade: 6
Peças Vendidas
Globalcode – Open4education
Conceito
Entidade
Comando()
Evento
Novo()
RegistraEvento()
ProcessaEvento()
Produto
Id: 10
Modelo: Caneta
Preço: R$ 14,00
Estoque: 9
Produto Criado
Id: 10
Id: 10
Modelo: Caneta
Renomeado
Id: 10
Preço: R$ 9,00
Preço Alterado
Id: 10
Quantidade: 15
Estoque Recebido
Id: 10
Preço: R$ 14,00
Preço Alterado
Id: 10
Quantidade: 6
Peças Vendidas
Globalcode – Open4education
O Problema de “Memória”
Um exemplo…
Globalcode – Open4education
O Problema de “Memória”
Um exemplo…
E se o custo do
Produto for
atualizado entre o
Bloqueio e a
Análise?
Globalcode – Open4education
O Problema de “Memória”
Id Custo Preço Venda
2 10.00 14.00
Id Pedido Produto Qtd Preço
10 1 2 3 12.32
12% de Desconto
Tabela de Produtos
Tabela de Itens de Pedido
Globalcode – Open4education
O Problema de “Memória”
Id Pedido Produto Qtd Preço
10 1 2 3 12.32
12% de Desconto
Id Custo Preço Venda
2 13.00 18.20
Tabela de Produtos
Tabela de Itens de Pedido
Globalcode – Open4education
O Problema de “Memória”
Id Pedido Produto Qtd Preço
10 1 2 3 12.32
Id Custo Preço Venda
2 13.00 18.20
32% de Desconto
Tabela de Produtos
Tabela de Itens de Pedido
Globalcode – Open4education
O Problema de “Memória”
Produto
Id: 2
Modelo: Caneta
Preço: R$ 18,20
Estoque: 12
Produto Criado
Id: 2
Id: 2
Modelo: Caneta
Renomeado
Id: 2
Preço: R$ 14,00
Preço Alterado
Id: 2
Quantidade: 15
Estoque Recebido
Id: 2
Preço: R$ 18,20
Preço Alterado
Id: 2
Quantidade: 3
Peças Vendidas
Pedido
Id: 1
Itens: { array }
Total: R$ 36,96Pedido Criado
Id: 1
Id: 1
Produto: 2
Quantidade: 3
Desconto: 12%
Item Adicionado
Tempo
Globalcode – Open4education
O Problema de “Memória”
Compreensão de Computações Passadas
Debugging de Código em Produção
Geração de Relatórios e Estatísticas
Globalcode – Open4education
O Problema de “Memória”
Logs
São desacoplados do código
Não traduzem para um estado do Sistema
Não são user-friendly
Alterar código
Previsão x Reação
Globalcode – Open4education
Event Sourcing
Entidade
Comando()
Evento
Novo()
RegistraEvento()
ProcessaEvento()
Globalcode – Open4education
Eventos?
Produto Pedido
Renomeado
Preço
Alterado
Estoque
Adicionado
Criado
Item
Adicionado
Faturado
Enviado
Globalcode – Open4education
Event Streams
Globalcode – Open4education
Event Streams
Eventos antigos nunca são alterados
EventoEventoEventoEvento
Globalcode – Open4education
Event Streams
Eventos antigos nunca são alterados
Eventos novos são inseridos no final
Evento EventoEventoEventoEvento
Globalcode – Open4education
Event Streams
Eventos antigos nunca são alterados
Eventos novos são inseridos no final
Enganos são corrigidos com Eventos de compensação
Evento EventoEventoEventoEvento Evento
Val: +10
Evento
Val: -10
Globalcode – Open4education
Reconstruindo...
A = 10 B = 15 A = 12 C = 50 B = 14 A = 18
Globalcode – Open4education
Reconstruindo...
A = 10 B = 15 A = 12 C = 50 B = 14 A = 18
Entidade
A: 18
B: 14
C: 50
Globalcode – Open4education
Reconstruindo...
A = 10 B = 15 A = 12 C = 50 B = 14 A = 18
Entidade
A: 18
B: 14
C: 50
Globalcode – Open4education
Reconstruindo...
A = 10 B = 15 A = 12 C = 50 B = 14 A = 18
Entidade
A: 12
B: 15
C: 50
Globalcode – Open4education
Snapshots
EntidadeEvento Evento Evento Evento Evento Evento Evento Evento
Globalcode – Open4education
Snapshots
EntidadeEvento Evento Evento Evento Evento Evento Evento Evento
Globalcode – Open4education
Snapshots
EntidadeEvento Evento Evento Evento Evento Evento Evento EventoSnapshot
Globalcode – Open4education
Snapshots
EntidadeEvento Evento Evento Evento Evento Evento Evento EventoSnapshot
Globalcode – Open4education
Snapshots
EntidadeEvento Evento Evento Evento Evento Evento Evento EventoSnapshot SnapshotSnapshot
Globalcode – Open4education
Resumindo...
Globalcode – Open4education
Organizando Streams
Eventos
P1 P2 C1 P2 C1 C2 P1 P1 P2 C2
Produto
Cliente
Pedido
Globalcode – Open4education
Organizando Streams
Produto
Cliente
Pedido
P1 P2 P2 P1
C1 C1 C2 C2
P1 P2
Produtos
Clientes
Pedidos
Globalcode – Open4education
Organizando Streams
Produto
Cliente
Cliente-1
C1 C1
Cliente-2
C2 C2
Produto-2
P2 P2
Produto-1
P1 P1
Globalcode – Open4education
Vantagens
Debug de Sistemas em Produção
Compreensão da Evolução do Estado
Queries Temporais
Geração de Relatórios e Estatísticas
Globalcode – Open4education
Vantagens
Não afeta a interface dos objetos
Globalcode – Open4education
CQRS
Objeto
Comando()
Consulta()
Globalcode – Open4education
CQRS
Objeto
Comando()
Consulta()
Objeto
Globalcode – Open4education
CQRS
Objeto
Comando()
Consulta()
Objeto
Objeto Consulta()
Objeto Consulta()
Globalcode – Open4education
CQRS
Objeto
Comando()
Consulta()
Objeto
Objeto Consulta()
Objeto Consulta()
Globalcode – Open4education
CQRS + Event Sourcing
Comando()
Objeto
Globalcode – Open4education
CQRS + Event Sourcing
Comando()
Objeto E E E E
Globalcode – Open4education
CQRS + Event Sourcing
Objeto
Comando()
Consulta()
Objeto
Objeto Consulta()
E E E E
Globalcode – Open4education
Projections
E E E E
E E E E
E E E E
E E E E
Pedido
Pedido
Produto
Cliente
Globalcode – Open4education
Projections
E E E E
E E E E
E E E E
E E E E
E E EE E E E
Pedido
Pedido
Produto
Cliente
Projection
Globalcode – Open4education
Projections - Exemplo
Globalcode – Open4education
Projections - Exemplo
NFs de Saída
S S S
S S S
S S S
Globalcode – Open4education
Projections - Exemplo
NFs de Saída
S S S
S S S
S S S
NFs de Entrada
E E E
E E E
E E E
Globalcode – Open4education
Projections - Exemplo
NFs de Saída
S S S
S S S
S S S
NFs de Entrada
E E E
E E E
E E E
Pagamentos
P P P
Globalcode – Open4education
Projections - Exemplo
PES
NFs de Saída
S S S
S S S
S S S
NFs de Entrada
E E E
E E E
E E E
Pagamentos
P P P
S S E S
Apuração
Globalcode – Open4education
Perguntas?
Globalcode – Open4education
Obrigado!
Contato:
prgoes@gmail.com

Mais conteúdo relacionado

Destaque

UX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticosUX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticosFernanda Bernardo
 
Dividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NETDividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NETCaliel Costa
 
Acelerando Startups com Design Thinking Sprints
Acelerando Startups com Design Thinking SprintsAcelerando Startups com Design Thinking Sprints
Acelerando Startups com Design Thinking SprintsAdilson Chicória
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
TDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 dias
TDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 diasTDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 dias
TDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 diasLuiz Rodrigues
 

Destaque (10)

The design sprint v1.0
The design sprint v1.0The design sprint v1.0
The design sprint v1.0
 
UX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticosUX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticos
 
Dividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NETDividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NET
 
Acelerando Startups com Design Thinking Sprints
Acelerando Startups com Design Thinking SprintsAcelerando Startups com Design Thinking Sprints
Acelerando Startups com Design Thinking Sprints
 
IBM Design: Design at Scale
IBM Design: Design at ScaleIBM Design: Design at Scale
IBM Design: Design at Scale
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TDC 2015 - Torne-se um programador melhor
TDC 2015 - Torne-se um  programador melhorTDC 2015 - Torne-se um  programador melhor
TDC 2015 - Torne-se um programador melhor
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 dias
TDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 diasTDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 dias
TDC SP 2016 - EVDnC - Extreme Value-Driven Coaching - 4 sprints em 5 dias
 

Semelhante a Event Sourcing organiza domínio em cadeia de eventos

Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcPaula Santana
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosJuan Lopes
 
Apresentacao tec talks - lean e scrum v05
Apresentacao   tec talks - lean e scrum v05Apresentacao   tec talks - lean e scrum v05
Apresentacao tec talks - lean e scrum v05nsitechtalks
 
Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015talkitbr
 
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5Intel Software Brasil
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APIEdlaine Zamora
 
Não fique preso a apenas uma arquitetura
Não fique preso a apenas uma arquiteturaNão fique preso a apenas uma arquitetura
Não fique preso a apenas uma arquiteturarafaelmueller
 
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Otávio Carvalho
 
TDC2016SP - Trilha Arquitetura Empresarial
TDC2016SP - Trilha Arquitetura EmpresarialTDC2016SP - Trilha Arquitetura Empresarial
TDC2016SP - Trilha Arquitetura Empresarialtdc-globalcode
 
Inventário de Ativos de TI - Smart Inventory
Inventário de Ativos de TI - Smart InventoryInventário de Ativos de TI - Smart Inventory
Inventário de Ativos de TI - Smart InventoryAmanda Monique Miguel
 
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...Allan Ferreira
 
Brasilia - Tecnologias Emergentes de BPM: Processos mais Inteligentes
Brasilia - Tecnologias Emergentes de BPM: Processos mais InteligentesBrasilia - Tecnologias Emergentes de BPM: Processos mais Inteligentes
Brasilia - Tecnologias Emergentes de BPM: Processos mais InteligentesSandy Kemsley
 
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...tdc-globalcode
 
46 apresentação siconv sicaf
46   apresentação siconv sicaf46   apresentação siconv sicaf
46 apresentação siconv sicafChristian Miranda
 
Scrum: Uma Aplicação em uma Software House
Scrum: Uma Aplicação em uma Software HouseScrum: Uma Aplicação em uma Software House
Scrum: Uma Aplicação em uma Software HouseUnimed Planalto Médio
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsRenato Groff
 

Semelhante a Event Sourcing organiza domínio em cadeia de eventos (20)

Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdc
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexos
 
Apresentacao tec talks - lean e scrum v05
Apresentacao   tec talks - lean e scrum v05Apresentacao   tec talks - lean e scrum v05
Apresentacao tec talks - lean e scrum v05
 
Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
New Relic Insights
New Relic InsightsNew Relic Insights
New Relic Insights
 
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
 
Metralhando sua API
Metralhando sua APIMetralhando sua API
Metralhando sua API
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua API
 
Não fique preso a apenas uma arquitetura
Não fique preso a apenas uma arquiteturaNão fique preso a apenas uma arquitetura
Não fique preso a apenas uma arquitetura
 
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
 
TDC2016SP - Trilha Arquitetura Empresarial
TDC2016SP - Trilha Arquitetura EmpresarialTDC2016SP - Trilha Arquitetura Empresarial
TDC2016SP - Trilha Arquitetura Empresarial
 
Inventário de Ativos de TI - Smart Inventory
Inventário de Ativos de TI - Smart InventoryInventário de Ativos de TI - Smart Inventory
Inventário de Ativos de TI - Smart Inventory
 
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
 
Brasilia - Tecnologias Emergentes de BPM: Processos mais Inteligentes
Brasilia - Tecnologias Emergentes de BPM: Processos mais InteligentesBrasilia - Tecnologias Emergentes de BPM: Processos mais Inteligentes
Brasilia - Tecnologias Emergentes de BPM: Processos mais Inteligentes
 
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
 
46 apresentação siconv sicaf
46   apresentação siconv sicaf46   apresentação siconv sicaf
46 apresentação siconv sicaf
 
Scrum: Uma Aplicação em uma Software House
Scrum: Uma Aplicação em uma Software HouseScrum: Uma Aplicação em uma Software House
Scrum: Uma Aplicação em uma Software House
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application Insights
 

Event Sourcing organiza domínio em cadeia de eventos