$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

  2. #MVPConf
    Trilha – Cases Reais
    Event Sourcing com Typescript
    Lucas Santos

    View Slide

  3. #MVPConf
    Github.com/khaosdoctor
    LinkedIn.com/in/lhs-santos
    Twitter.com/_staticvoid
    Site: lsantos.dev
    Lucas Santos
    Lead Solutions Architect @ Nextcode
    Microsoft MVP @ Developer Technologies

    View Slide

  4. 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

    View Slide

  5. Patrocinadores

    View Slide

  6. #MVPConf

    View Slide

  7. #MVPConf
    O que é Event
    Sourcing?

    View Slide

  8. #MVPConf
    “Capture all changes to na
    application state as a sequence
    of events”

    View Slide

  9. #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

    View Slide

  10. #MVPConf
    E o que isso implica?

    View Slide

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

    View Slide

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

    View Slide

  13. #MVPConf
    Viagem no tempo!

    View Slide

  14. #MVPConf

    View Slide

  15. #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

    View Slide

  16. #MVPConf
    Um exemplo
    prático

    View Slide

  17. #MVPConf
    Controle de rotas de navios:

    View Slide

  18. #MVPConf
    Navio:
    ID: 1bef45c
    Nome: Black Pearl
    Events: []
    Estado: {
    Loc: Santos
    }
    Controle de rotas de navios:

    View Slide

  19. #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:

    View Slide

  20. #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:

    View Slide

  21. #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:

    View Slide

  22. #MVPConf
    O que é um estado?

    View Slide

  23. #MVPConf
    Entidades

    View Slide

  24. #MVPConf
    - ID
    - Propriedades estáticas
    - Array de eventos
    - Estado
    - Metadados
    A anatomia de uma entidade

    View Slide

  25. #MVPConf
    Eventos

    View Slide

  26. #MVPConf
    - ID
    - Data de criação
    - Usuário de criação
    - Dados modificados
    A anatomia de um evento

    View Slide

  27. #MVPConf
    Reducers

    View Slide

  28. #MVPConf
    Estado
    Inicial

    View Slide

  29. #MVPConf
    Estado
    Inicial
    Novo estado
    inicial
    Aplica evento

    View Slide

  30. #MVPConf
    Estado
    Inicial
    Novo estado
    inicial
    ...
    Aplica evento

    View Slide

  31. #MVPConf
    Estado
    Inicial
    Novo estado
    inicial
    Aplica todos os eventos
    ... Estado final
    Aplica evento

    View Slide

  32. #MVPConf
    Ferramentas

    View Slide

  33. #MVPConf
    https://github.com/nxcd/paradox
    https://github.com/nxcd/tardis

    View Slide

  34. #MVPConf
    Arquitetura

    View Slide

  35. #MVPConf
    D.D.D + M.V.C

    View Slide

  36. #MVPConf

    View Slide

  37. #MVPConf
    Por que TS?

    View Slide

  38. #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

    View Slide

  39. #MVPConf
    Prós e contras

    View Slide

  40. #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

    View Slide

  41. #MVPConf

    View Slide

  42. #MVPConf
    :
    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

    View Slide

  43. OBRIGADO
    #MVPConf
    Github.com/khaosdoctor
    LinkedIn.com/in/lhs-santos
    Twitter.com/_staticvoid
    Site: lsantos.dev

    View Slide

  44. Sorteios dos Brindes
    #MVPConf
    Somente participarão dos sorteios os
    participantes que estiverem inscritos
    nas palestras e responderem as
    pesquisas de satisfação.

    View Slide