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

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 - TDC 2015 - Pedro Góes

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
nsitechtalks
 
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
Intel Software Brasil
 
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
rafaelmueller
 
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
Unimed Planalto Médio
 

Semelhante a Event Sourcing - TDC 2015 - Pedro Góes (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
 

Último

Último (8)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
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
 
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 - 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
 
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
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
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
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

Event Sourcing - TDC 2015 - Pedro Góes