Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Event Sourcing com Typescript - MVPConf

Event Sourcing com Typescript - MVPConf

Lucas Santos

April 13, 2019
Tweet

More Decks by Lucas Santos

Other Decks in Programming

Transcript

  1. 12 e 13 de abril de 2019 São Paulo, Brasil

    Conectando Pessoas, Processos e Tecnologia
  2. Doação para Entidades #MVPConf Toda a renda obtida com a

    venda dos ingressos para o MVPConf LATAM 2019 serão doados para cinco Entidades beneficentes. Uma em cada região do Brasil! Consulte no site as Entidades beneficiadas! MVPConf.com.br
  3. #MVPConf Event Sourcing em tópicos: - Padrão de arquitetura -

    Apareceu em 2005 em um artigo do Martin Fowler - Toda entidade tem um estado inicial - O estado inicial só pode ser alterado por eventos - Base de padrões como Flux e Redux
  4. #MVPConf O que isso implica: - Facilidade de debugging -

    Log automático nativo - Capacidade de desfazer alterações - Reconstrução de estados anteriores
  5. #MVPConf O que isso implica: - Facilidade de debugging -

    Log automático nativo - Capacidade de desfazer alterações - Reconstrução de estados anteriores
  6. #MVPConf O que isso implica: - Toda entidade tem um

    estado inicial - Toda entidade começa com um array de eventos - Só um evento “Criado” deve estar presente - O estado final é obtido reduzindo o array de eventos
  7. #MVPConf Navio: ID: 1bef45c Nome: Black Pearl Events: [] Estado:

    { Loc: Santos } Controle de rotas de navios:
  8. #MVPConf Navio: ID: 1bef45c Nome: Black Pearl Events: [ navio-criado

    ] Estado: { Loc: Santos } Evento: - ID: 1abc34f - Nome: navio-criado - Loc: Santos - Data: 2019-04-13 Controle de rotas de navios:
  9. #MVPConf Navio: ID: 1bef45c Nome: Black Pearl Events: [ navio-criado

    ] Estado: { Loc: Santos } Evento: - ID: 9d84bc4 - Nome: aportou - Loc: New York - Data: 2019-05- 10 Controle de rotas de navios:
  10. #MVPConf Navio: ID: 1bef45c Nome: Black Pearl Events: [ navio-criado

    ] Estado: { Loc: Santos } Evento: - ID: 9d84bc4 - Nome: aportou - Loc: New York - Data: 2019-05- 10 Navio: ID: 1bef45c Nome: Black Pearl Events: [ navio-criado, aportou ] Estado: { Loc: New York } Controle de rotas de navios:
  11. #MVPConf - ID - Propriedades estáticas - Array de eventos

    - Estado - Metadados A anatomia de uma entidade
  12. #MVPConf - ID - Data de criação - Usuário de

    criação - Dados modificados A anatomia de um evento
  13. #MVPConf Por que Typescript: - Tipos facilitam saber o retorno

    de tudo! - Evita erros em runtime - Entidades com estados iniciais e finais bem definidos - Eventos tem tipos definidos e seguem uma interface - Tipagem ajuda a manter conceitos P.O.O - Intellisense no VSCode <3
  14. #MVPConf Prós: - Histórico preciso em qualquer ponto do tempo

    - Logs nativos da implementação - D.D.D força atenção ao comportamento - Inserir eventos é atômico e muito rápido - Facilidade de debug - Rapidez no desenvolvimento uma vez tendo a base pronta Contras - Falta de ferramentas - Não existe muito conteúdo - Custo de implementação - Custo de inovação - Pode ser complexo a primeira vista - Entidades com muitos eventos: - Estouro do tamanho do documento - Demora no reduce
  15. #MVPConf <refs>: 1. https://martinfowler.com/eaaDev/EventSourcing.html 2. https://medium.com/@gabrielqueiroz/vamos-falar-sobre-event-sourcing- 276ae66106f7 3. https://microservices.io/patterns/data/event-sourcing.html 4.

    https://github.com/nxcd 5. https://github.com/khaosdoctor/event-sourcing-demo-app 6. https://imasters.com.br/back-end/event-sourcing-desenvolvendo-sua-primeira- aplicacao 7. https://imasters.com.br/banco-de-dados/event-sourcing-arquitetura-que-pode- salvar-seu-projeto
  16. Sorteios dos Brindes #MVPConf Somente participarão dos sorteios os participantes

    que estiverem inscritos nas palestras e responderem as pesquisas de satisfação.