Event Sourcing con NEventStore

727 views
595 views

Published on

Estratto tecnico del talk http://lanyrd.com/2014/cdays14/scxbbf/ fatto a quattro mani con @ziobrando

Published in: Technology

Event Sourcing con NEventStore

  1. 1. Event Sourcing con NEventStore Estratto “dev” del talk per i Community Days 2014
 http://lanyrd.com/2014/cdays14/scxbbf/ Slide complete EventStorming+EventSourcing su http://www.slideshare.net/ziobrando/idea-postittest-verdi !1 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  2. 2. @andreabalducci #CDays14 – Milano 25, 26 e 27 Febbraio 2014 !2
  3. 3. Il nostro dominio ha una storia da raccontare… !3 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  4. 4. …ma spesso ci accontentiamo dei titoli di coda !4 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  5. 5. !5 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  6. 6. ..invece di guardare tutta la storia. !6 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  7. 7. !7 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  8. 8. Quante informazioni perdiamo ? !8 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  9. 9. Il saldo è 6.684€ !9 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  10. 10. Data Dare 3/2 Avere Descrizione operazione 160 4/2 1.500 4/2 1.400 10/2 180 12/2 200 12/2 180 14/2 80 17/2 200 20/2 16 20/2 300 20/2 320 20/2 75 21/2 16 22/2 180 22/2 200 2.107 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Saldo al 22/2 : 6.684 !10
  11. 11. Data Dare 3/2 Avere Descrizione operazione Supermercato Le Fornaci - Castelfidardo 160 4/2 1.500 ACME Spa - Stipendio Gennaio 4/2 1.400 ACME Spa - Stipendio Gennaio 10/2 180 Supermercato Le Fornaci - Castelfidardo 12/2 200 Mediaworld Ancona 12/2 180 Pittarello Ancona 14/2 80 17/2 200 20/2 16 20/2 300 Mediaworld Bologna 20/2 320 Carpisa Bologna 20/2 75 Hotel Bologna 21/2 16 Autostrade Spa - Casello Ancona 22/2 180 amazon.it 22/2 200 zalando.it 2.107 Ristorante Osteria da Pippo IperSimply- Castelfidardo Autostrade Spa - Casello Bologna 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Saldo al 22/2 : 6.684 !11
  12. 12. Data Dare 3/2 Avere Descrizione operazione Supermercato Le Fornaci - Castelfidardo 160 4/2 1.500 ACME Spa - Stipendio Gennaio 4/2 1.400 ACME Spa - Stipendio Gennaio 10/2 180 Supermercato Le Fornaci - Castelfidardo 12/2 200 Mediaworld Ancona 12/2 180 Pittarello Ancona 14/2 80 17/2 200 20/2 16 20/2 300 Mediaworld Bologna 20/2 320 Carpisa Bologna 20/2 75 Hotel Bologna 21/2 16 Autostrade Spa - Casello Ancona 22/2 180 amazon.it 22/2 200 Due persone
 Stessa Azienda zalando.it 2.107 Ristorante Osteria da Pippo IperSimply- Castelfidardo Autostrade Spa - Casello Bologna 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Saldo al 22/2 : 6.684 !11
  13. 13. Data Dare 3/2 Avere Descrizione operazione Supermercato Le Fornaci - Castelfidardo 160 4/2 1.500 ACME Spa - Stipendio Gennaio 4/2 1.400 ACME Spa - Stipendio Gennaio 10/2 180 Supermercato Le Fornaci - Castelfidardo 12/2 200 Mediaworld Ancona 12/2 180 Pittarello Ancona 14/2 80 17/2 200 20/2 16 20/2 300 Mediaworld Bologna 20/2 320 Carpisa Bologna 20/2 75 Hotel Bologna 21/2 16 Autostrade Spa - Casello Ancona 22/2 180 amazon.it 22/2 200 Due persone
 Stessa Azienda zalando.it 2.107 Ristorante Osteria da Pippo IperSimply- Castelfidardo Carnivori Autostrade Spa - Casello Bologna 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Saldo al 22/2 : 6.684 !11
  14. 14. Data Dare 3/2 Avere Descrizione operazione Supermercato Le Fornaci - Castelfidardo 160 4/2 1.500 ACME Spa - Stipendio Gennaio 4/2 1.400 ACME Spa - Stipendio Gennaio 10/2 Auto senza 12/2 telepass 12/2 180 Supermercato Le Fornaci - Castelfidardo 200 Mediaworld Ancona 180 Due persone
 Stessa Azienda Pittarello Ancona Ristorante Osteria da Pippo 14/2 80 17/2 200 20/2 16 20/2 300 Mediaworld Bologna 20/2 320 Carpisa Bologna 20/2 75 Hotel Bologna 21/2 16 Autostrade Spa - Casello Ancona 22/2 180 amazon.it 22/2 200 Carnivori zalando.it 2.107 IperSimply- Castelfidardo Autostrade Spa - Casello Bologna 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Saldo al 22/2 : 6.684 !11
  15. 15. LuiDataLei Dare & 3/2 Avere Descrizione operazione Supermercato Le Fornaci - Castelfidardo 160 4/2 1.500 ACME Spa - Stipendio Gennaio 4/2 1.400 ACME Spa - Stipendio Gennaio 10/2 Auto senza 12/2 telepass 12/2 180 Supermercato Le Fornaci - Castelfidardo 200 Mediaworld Ancona 180 Due persone
 Stessa Azienda Pittarello Ancona Ristorante Osteria da Pippo 14/2 80 17/2 200 20/2 16 20/2 300 Mediaworld Bologna 20/2 320 Carpisa Bologna 20/2 75 Hotel Bologna 21/2 16 Autostrade Spa - Casello Ancona 22/2 180 amazon.it 22/2 200 Carnivori zalando.it 2.107 IperSimply- Castelfidardo Autostrade Spa - Casello Bologna 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Saldo al 22/2 : 6.684 !11
  16. 16. LuiDataLei Dare & 3/2 Avere Descrizione operazione Supermercato Le Fornaci - Castelfidardo 160 4/2 1.500 ACME Spa - Stipendio Gennaio 4/2 1.400 ACME Spa - Stipendio Gennaio 10/2 Auto senza 12/2 telepass 12/2 180 Supermercato Le Fornaci - Castelfidardo 200 Mediaworld Ancona 180 Due persone
 Stessa Azienda Pittarello Ancona Ristorante Osteria da Pippo 14/2 80 17/2 200 20/2 16 20/2 300 Mediaworld Bologna 20/2 320 Carpisa Bologna 20/2 75 Hotel Bologna 21/2 16 Autostrade Spa - Casello Ancona 22/2 180 amazon.it 22/2 200 zalando.it Carnivori 2.107 IperSimply- Castelfidardo Autostrade Spa - Casello Bologna 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Lei compra entro un’ora da lui Saldo al 22/2 : 6.684 !11
  17. 17. LuiDataLei Dare & 3/2 Avere Descrizione operazione Supermercato Le Fornaci - Castelfidardo 160 4/2 1.500 ACME Spa - Stipendio Gennaio 4/2 1.400 ACME Spa - Stipendio Gennaio 10/2 Auto senza 12/2 telepass 12/2 180 Supermercato Le Fornaci - Castelfidardo 200 Mediaworld Ancona 180 Due persone
 Stessa Azienda Pittarello Ancona Ristorante Osteria da Pippo 14/2 80 17/2 200 20/2 16 20/2 300 Mediaworld Bologna 20/2 320 Carnivori Carpisa Bologna 20/2 21/2 22/2 22/2 IperSimply- Castelfidardo Autostrade Spa - Casello Bologna 75 24/2 spesa a Hotel Bologna 16 Autostrade Spa - Casello Ancona Lei compra entro Castelfidardo amazon.it 180 un’ora da lui 200 zalando.it 2.107 2.900 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Saldo al 22/2 : 6.684 !11
  18. 18. Event Sourcing?
 !12 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  19. 19. Event Sourcing?
 ne ho sentito parlare… !12 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  20. 20. Dominio !13 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  21. 21. Aggregato DB ORM Risorsa_1 Proprietà Richiesta_1 Richiesta_2 Utente_1 Metodi Risorsa_2 !14 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  22. 22. ok.. basta una tabella di log !15 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  23. 23. basta !16 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  24. 24. basta duplicare tutte le strutture dati !16 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  25. 25. basta duplicare tutte le strutture dati tenere tutto sincronizzato !16 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  26. 26. basta duplicare tutte le strutture dati tenere tutto sincronizzato versionare tutto !16 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  27. 27. basta duplicare tutte le strutture dati tenere tutto sincronizzato versionare tutto un bel flag “comando io” !16 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  28. 28. basta duplicare tutte le strutture dati tenere tutto sincronizzato versionare tutto un bel flag “comando io” mapping! mapping! mapping! (cit) !16 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  29. 29. basta uno storage ad eventi !17 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  30. 30. NEventStore A persistence agnostic Event Store for .NET
 http://neventstore.org/ !18 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  31. 31. CommonDomain la “colla” tra DDD e NEventStore !19 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  32. 32. Aggregato DB ORM Risorsa_1 Proprietà Richiesta_1 Richiesta_2 Utente_1 Metodi Risorsa_2 !20 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  33. 33. Aggregato EventStore Richiesta Creata Stato Common
 Domain Eventi Richiesta Approvata Prenotazione Confermata Prenotazione
 Respinta Risorsa
 Acquistata Comandi Risorsa
 Dismessa !21 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  34. 34. Evento Chi Quando Dove Cosa Perché !22 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  35. 35. Evento Chi Headers: User_1 Quando Timestamp: 2014-02-25T15:45 Dove Aggregato: Presentazione Cosa Slide Attiva: 1 Perché PresentazioneIniziata !23 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  36. 36. Evento Chi Headers: User_1 Quando Timestamp: 2014-02-25T15:45 Dove Aggregato: Presentazione Cosa Slide Attiva: 1 Perché PresentazioneIniziata !24 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  37. 37. A. var aggregate = repository.GetById<TAggregate>(id); B. aggregate.Command(a,b,c); C. repository.Save(aggregate, commitId, h => h.Add(k,v)); !25 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  38. 38. A. var aggregate = repository.GetById<TAggregate>(id); B. aggregate.Command(a,b,c); C. repository.Save(aggregate, commitId, h => h.Add(k,v)); Store Commit Commit Headers Event1 Event2 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 !25
  39. 39. A. var aggregate = repository.GetById<TAggregate>(id); B. aggregate.Command(a,b,c); C. repository.Save(aggregate, commitId, h => h.Add(k,v)); Store Commit Observers Commit Headers Event1 Event2 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Dispatch Commit Projections Process Managers Clients !25
  40. 40. Command State !26 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  41. 41. ubiquitous language Interrogazione Command State !26 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  42. 42. Domain
 Exception ubiquitous language Interrogazione Command State !26 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  43. 43. Domain
 Exception ubiquitous language Interrogazione Command Event (ok) State !26 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  44. 44. Domain
 Exception ubiquitous language Interrogazione Command Event (ko) Event (ok) State !26 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  45. 45. Domain
 Exception ubiquitous language Interrogazione Command Event (ko) Event (ok) Router State !26 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  46. 46. Svantaggi !27 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  47. 47. Quantità di codice dipende.. !28 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  48. 48. Quantità di codice tanto !28 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  49. 49. Quantità di codice tanto ma dannatamente semplice !28 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  50. 50. Vantaggi !29 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  51. 51. Focus su struttura dati !30 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  52. 52. Focus su comportamento !30 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  53. 53. Focus su comportamento business value !30 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  54. 54. Decisioni prese su stato (stale) !31 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  55. 55. Decisioni prese su stato corrente !31 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  56. 56. Decisioni prese su stato corrente by design !31 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  57. 57. Costo di implementazione esponenziale !32 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  58. 58. Costo di implementazione lineare !32 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  59. 59. Costo di implementazione lineare eventi++ !32 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  60. 60. Testing complesso !33 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  61. 61. Testing facile !33 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  62. 62. Testing facile stato -> comando -> eventi !33 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  63. 63. Collisioni transazioni (tutto o niente) !34 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  64. 64. Collisioni merge intelligenti / replay !34 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  65. 65. Collisioni merge intelligenti / replay by design !34 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  66. 66. Integrabilità batch / etl / ws ad hoc / trigger !35 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  67. 67. Integrabilità evento -> subscriber !35 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  68. 68. Integrabilità evento -> subscriber push o pull !35 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  69. 69. !36 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  70. 70. !37 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  71. 71. !38 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  72. 72. !38 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  73. 73. !38 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  74. 74. !38 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  75. 75. Nei test runner diventa !39 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  76. 76. Join the dots !40 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  77. 77. !41 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  78. 78. Register Resource Resource Registered !42 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  79. 79. !43 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  80. 80. !44 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  81. 81. !45 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  82. 82. stato Handler eventi Interrogazioni allo stato in UL !46 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  83. 83. !47 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  84. 84. !48 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  85. 85. !49 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  86. 86. !50 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  87. 87. !51 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  88. 88. !52 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  89. 89. Ricapitolando !53 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  90. 90. Event Storming Common
 Domain NEventStore DDD #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Machine Specifications !53
  91. 91. http://github.com/andreabalducci/cdays14 !54 #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  92. 92. Elogio alla community “…gli user group sono stati lo strumento che maggiormente mi hanno permesso di imparare sia come scrivere software in modo nettamente migliore, sia come affrontare le altre componenti relative alla gestione di un prodotto o di un progetto. Ciò è stato possibile grazie al dialogo e al confronto con persone intelligenti e disponibili a scambiare gratuitamente le proprie idee, opinioni ed esperienze, col coraggio di riportare anche quelle fallimentari, invece di chiudersi nel proprio orticello cercando di nascondere i propri segreti. Questo è lo scambio culturale, che porta ad un’effettiva crescita, a cui tutti coloro che svolgono la nostra professione farebbero bene a partecipare e contribuire.” Elogio alla community - @ste8 #CDays14 – Milano 25, 26 e 27 Febbraio 2014 !55

×