Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming

1,215 views

Published on

Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming.

DDD Saturdaty 2014 @ Pordenone

Published in: Technology

[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming

  1. 1. ALÅM AEKI guida illustrata all’esplorazione di un dominio con
 EventSourcing + EventStorming
  2. 2. Agenda Selfie Gatto Citazione personaggio famoso GIF AnimateCitazioni film xkcd Citazione letteraria
  3. 3. @andreabalducci
  4. 4. Artigiani del software
  5. 5. Intranet 2.0
  6. 6. 10+ filiali 100+ utenti 250.000+ pagine
  7. 7. Documentale Enterprise Search Calendari Personali e Condivisi Ticket di assistenza Richieste POS Richieste WebBanking Rubrica dinamica Prenotazione attrezzature Statistiche Link Utili Organigramma Censimento IT Single Sign-on Pubblicazione ProdottiNotifiche push Chat Scambio files
  8. 8. Fare tutto …
  9. 9. … per il primo rilascio …
  10. 10. … perché …
  11. 11. … dobbiamo fare una sorpresa agli utenti.
  12. 12. Ricapitolando
  13. 13. Ricapitolando Ambito applicativo esteso Tempo limitato Gruppo di lavoro ristretto Switch “Big Bang” dai sistemi in uso Cliente Enterprise
  14. 14. Le condizioni ideali
  15. 15. solo per Schrödinger
  16. 16. x nessun gatto ha subito maltrattamenti nella realizzazione di questa applicazione.
  17. 17. Consigli?
  18. 18. Ok, let’s do it!
  19. 19. So che lo state pensando
  20. 20. Iniziamo con qualcosa di semplice
  21. 21. Prenotazione attrezzature
  22. 22. “Nothing surprises me; I’m a scientist.” (font approvato dal CERN)
  23. 23. ResourceTypes ResourcesUsers Reservations 4 Tabelle
  24. 24. Tabelle? Non è DDD!
  25. 25. ResourceTypes ResourcesUsers Reservations 4 Tabelle
  26. 26. ResourceType ResourceUser Reservation 4 Aggregati
  27. 27. ResourceType ResourceUser Reservation 4 Aggregati
  28. 28. ResourceType Resource User Reservation Aggregati Value Objects +
  29. 29. Tana! (il pattern dei pattern)
  30. 30. e all’improvviso…
  31. 31. “Non l’abbiamo evidenziato perché è scontato che il software lo faccia”
  32. 32. “Dobbiamo fare un sistema migliore del precedente, con più funzionalità”
  33. 33. Statistiche utente / risorsa / tipologia L’auto è in officina Il PC non è configurato Alla fine di una riunione la sala deve essere pulita prima di essere nuovamente disponibile Gli utenti prenotano le attrezzature disponibili… …e il nostro ufficio decide a chi darle. Un utente può annullare una prenotazione… …ma noi dobbiamo confermare l’annullamento. Alcune richieste hanno precedenza su altre La berlina è riservata al C.D.A. Storico delle prenotazioni Notifiche ad ogni evento
  34. 34. Aggiungiamo un flag
  35. 35. Storicizziamo il dato
  36. 36. Gestiamo l’eccezione
  37. 37. Iniettiamo un servizio…
  38. 38. “Iniziamo con qualcosa di semplice”
  39. 39. “E mo’ ?”
  40. 40. “Molte di quelle che chiamiamo difficoltà non ci paiono tali se non perché non ci vogliam torre la briga di cercare i mezzi, spesso molto semplici e maneggevoli, che basterebbero a superarle.” ! Arturo Graf, Ecce Homo, 1908
  41. 41. “Molte di quelle che chiamiamo difficoltà non ci paiono tali se non perché non ci vogliam torre la briga di cercare i mezzi, spesso molto semplici e maneggevoli, che basterebbero a superarle.” ! Arturo Graf, Ecce Homo, 1908
  42. 42. Primo indizio…
  43. 43. Secondo indizio…
  44. 44. Statistiche utente / risorsa / tipologia L’auto è in officina Il PC non è configurato Alla fine di una riunione la sala deve essere pulita prima di essere nuovamente disponibile Gli utenti prenotano le attrezzature disponibili… …e il nostro ufficio decide a chi darle. Un utente può annullare una prenotazione… …ma noi dobbiamo confermare l’annullamento. Alcune richieste hanno precedenza su altre La berlina è riservata al C.D.A. Storico delle prenotazioni Notifiche ad ogni evento
  45. 45. Notifiche ad ogni evento
  46. 46. Terzo indizio…
  47. 47. You can’t connect the dots looking forward;! ! you can only connect them looking backwards.
  48. 48. Luglio 2013
  49. 49. @ziobrando
  50. 50. La mia idea era quella di focalizzarci su Event Storming o comunque su tecniche / trucchi / etc che facilitino la modellazione di un dominio. Sto modellando flussi come se non ci fosse un domani.. E’ necessaria una sala con almeno una superficie utile di grandi dimensioni. Utilizzeremo rotoli di carta per la visualizzazione dei flussi e per la costruzione del modello. Ciao Brando, ho visto su slideshare del materiale che hai pubblicato. Vorrei organizzare un workshop sulla modellazione.
  51. 51. …the whole thing exploded in summer 2013. While I realised there was a lot of value in it, other practitioners (Mathias Verraes, Tom Janssen, Marco Heimeshoff, Yves Reynhout, Tomas Jaskula, Alessandro Colla, Andrea Balducci, Jef Claes, just to name a few) started exploring and playing with the format with amazing results, leading me to the conclusion that this is something more than “just another workshop format”. http://ziobrando.blogspot.it/2013/11/introducing-event-storming.html
  52. 52. …the whole thing exploded in summer 2013. While I realised there was a lot of value in it, other practitioners (Mathias Verraes, Tom Janssen, Marco Heimeshoff, Yves Reynhout, Tomas Jaskula, Alessandro Colla, Andrea Balducci, Jef Claes, just to name a few) started exploring and playing with the format with amazing results, leading me to the conclusion that this is something more than “just another workshop format”. http://ziobrando.blogspot.it/2013/11/introducing-event-storming.html
  53. 53. Event Storming
  54. 54. is a workshop format for Event Storming quickly exploring complex business domains
  55. 55. proviamo a cambiare il punto di vista
  56. 56. ALÅM AEKI
  57. 57. IKEA MÅLA
  58. 58. Le informazioni giuste..
  59. 59. http://blog.avanscoperta.it/it/2014/05/07/eventstorming-invite-the-right-people/
  60. 60. in poco tempo
  61. 61. valgono
 un sacco* * [sàc-co] s.m. - fig. fam. Ingente quantità, numero elevato
  62. 62. costano solo
 21,87€* * facilitatore non incluso nella confezione. Può creare Crea dipendenza.
  63. 63. Scegliete la parete più lunga +
  64. 64. Il tempo scorre in questa direzione
  65. 65. Un pennarello a testa
  66. 66. Iniziamo a scrivere!
  67. 67. Domain Event
  68. 68. Rappresenta qualcosa di significativo accaduto nel dominio. Domain Event
  69. 69. Richiesta
 Approvata
  70. 70. Attacchiamo i primi eventi disponendoli sull’asse temporale Richiesta
 Approvata Richiesta
 Confermata Richiesta
 Respinta
  71. 71. Pro Tip
 I post-it non si correggono
  72. 72. Command
  73. 73. Indica l’intento dell’utente Command
  74. 74. Approva
 Richiesta
  75. 75. Associamo ad ogni evento il comando relativo. Approva
 Richiesta
  76. 76. Pro Tip
 Identificate chi attiva il comando
  77. 77. Pro Tip
 Ogni tanto fate finta di non aver capito… vogliamo osservare la reazione dei partecipanti!
  78. 78. Read Model
  79. 79. Rappresenta il supporto decisionale per l’utente Read Model
  80. 80. Lista delle attrezzature disponibili
  81. 81. Il readmodel aiuta ad identificare le informazioni necessarie all’utente per prendere decisioni Lista delle attrezzature disponibili
  82. 82. Ubiquitous language
  83. 83. Definisce con precisione il significato di ogni termine Ubiquitous language
  84. 84. Attrezzatura
 Bene materiale oggetto di prenotazione
  85. 85. Attrezzatura
 Bene materiale oggetto di prenotazione ambiguitàconvergenza sul significato dei termini
  86. 86. Defrag
  87. 87. Aggreghiamo i post-it Defrag
  88. 88. Aggregato Aggregato Bounded Context Aggregato Bounded Context
  89. 89. Invarianti
  90. 90. Sono le regole che non possiamo violare Invarianti
  91. 91. Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.
  92. 92. Aggregato Aggregato Bounded Context Aggregato Bounded Context Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.
  93. 93. Pro Tip
 Seguite il gruppo Eventstormers https://plus.google.com/communities/ 113258571348605620818
  94. 94. Problema smontato!
  95. 95. Ma non compila
  96. 96. http://xkcd.com/844/
  97. 97. Event Sourcing
  98. 98. “Capture all changes to an application state as a sequence of events.” Event Sourcing http://martinfowler.com/eaaDev/EventSourcing.html TimeRisorsa
 Censita Risorsa
 resa disponibile Prenotazione
 Inserita Prenotazione
 Approvata Prenotazione
 Inserita Prenotazione
 Confermata Prenotazione
 Non Approvata Risorsa
 Dismessa
  99. 99. Risorsa
 Censita Risorsa
 resa disponibile Prenotazione
 Inserita Prenotazione
 Approvata Prenotazione
 Inserita Prenotazione
 Confermata Prenotazione
 Non Approvata Risorsa
 Dismessa Risorsa_1 Prenotazione_1 Prenotazione_2
  100. 100. Title : ”Budget 2014 - IT”,
 LastModified : “2013-09-15”,
 Tags : []," Author: “Board of Directors”," PublishedBy: null,
 File: “Budget.xlsx” Who: “Mr. Smith”, " Why: “DocumentCreated”," When: “2013-09-15 18:35”,
 What:{" Title : ”Budget 2014 - IT”,
 Author: “Board of Directors”," File: “Budget.xlsx” " } Who: “Mary J.”, " Why: “RevisionAdded”," When: “2013-09-16 09:40”,
 What: {
 File: “Budget with Costs.xlsx”
 } Who: “Mary J.”, " Why: “DocumentTagged”," When: “2013-09-16 09:40”,
 What: {
 Tags : [“Draft”, “Accounting”]
 } Who: “Luther Blissett”, " Why: “RevisionAdded”," When: “2013-12-06 21:35”,
 What: {
 File: “Budget with Costs & Sales Forecast.xlsx”" } Who: “Luther Blissett”, " Why: “DocumentTagged”," When: “2013-12-06 21:35”,
 What: {
 Tags : [“Budget”,”Sales”,“Accounting”]
 } Who: “Jane Doe”, " Why: “DocumentPublished”," When: “2014-01-05 23:17”,
 What : {
 Title : “Budget 2014”
 Tags : [“Budget”,”Sales”,“Accounting”]
 } TIME Title : ”Budget 2014”,
 LastModified : “2014-01-05”,
 Tags : [“Budget”, “Sales”, “Accounting”]," Author: “Board of Directors”," PublishedBy: “Jane Doe”,
 File: “Budget with Costs & Sales Forecast.xlsx” Title : ”Budget 2014 - IT”,
 LastModified : “2013-09-16”,
 Tags : [“Draft”, “Accounting”]," Author: “Board of Directors”," PublishedBy: null,
 File: “Budget with Costs.xlsx” Title : ”Budget 2014 - IT”,
 LastModified : “2013-12-06”,
 Tags : [“Budget”,”Sales”,“Accounting”]," Author: “Board of Directors”," PublishedBy: null,
 File: “Budget with Costs & Sales Forecast.xlsx”" Loss of Memory
  101. 101. 15 Settembre 2013 16 Settembre 2013 12 Dicembre 2013 5 Gennaio 2014 6 Maggio 2014
  102. 102. CQRS
  103. 103. CQRS “At its heart is a simple notion that you can use a different model to update information than the model you use to read information” http://martinfowler.com/bliki/CQRS.html
  104. 104. Business Logic Decision support system
  105. 105. IL database è una presenza aliena nel dominio per molti è l’unica fonte di verità per altri è il freno all’evoluzione del sistema
  106. 106. Query CommandBusiness Logic Decision support system
  107. 107. Command Query
  108. 108. Estendiamo
 Event Storming
  109. 109. Transizioni
  110. 110. Esploriamo le relazioni tra comandi ed eventi Transizioni
  111. 111. Aggregato Aggregato Bounded Context Aggregato Bounded Context
  112. 112. Aggregato
  113. 113. if()
  114. 114. if()
  115. 115. Process
 manager
  116. 116. Rappresenta un processo di business complesso Process
 manager
  117. 117. Assegnazione attrezzatura
  118. 118. Assegnazione attrezzatura
  119. 119. Command Query Responsibility Segregation Command Process Manager Event Event Aggregate Projections Query Model Query Model
  120. 120. Assegnazione attrezzatura
  121. 121. Ma non compila ?
  122. 122. Assegnazione attrezzatura Lista delle attrezzature disponibili Approva
 Richiesta Richiesta
 Approvata Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.
  123. 123. AssegnazioneAttrezzature ! (process) AttrezzatureDisponibili ! (model) ApprovaRichiesta ! (command) RichiestaApprovata ! (event) VietaPrenotazioniSovrapposte ! (business rule)
  124. 124. Ok, bel pistolotto… ma ha funzionato?
  125. 125. ReadModel NEventStore Intranet Auth Tools Collaboration DMS Process" Manager Projections MVC
 WebApi SignalR Indexer PdfPipeline OfficePipeline msg query pushhttp write eventcommand CQRS + ES
  126. 126. grazie! www.slideshare.net/andreabalducci feedback => andrea.balducci@prxm.it

×