ALÅM AEKI
guida illustrata all’esplorazione di un dominio con

EventSourcing + EventStorming
Agenda
Selfie Gatto
Citazione personaggio famoso
GIF AnimateCitazioni film
xkcd
Citazione letteraria
@andreabalducci
Artigiani del software
Intranet 2.0
10+
filiali
100+
utenti
250.000+
pagine
Documentale
Enterprise Search
Calendari Personali e Condivisi
Ticket di assistenza
Richieste POS
Richieste WebBanking
Rubr...
Fare tutto …
… per il primo rilascio …
… perché …
… dobbiamo fare una sorpresa
agli utenti.
Ricapitolando
Ricapitolando
Ambito applicativo esteso
Tempo limitato
Gruppo di lavoro ristretto
Switch “Big Bang” dai sistemi in uso
Cli...
Le condizioni ideali
solo per Schrödinger
x nessun gatto ha subito maltrattamenti nella realizzazione di questa applicazione.
Consigli?
Ok, let’s do it!
So
che lo
state pensando
Iniziamo con qualcosa
di semplice
Prenotazione
attrezzature
“Nothing surprises me;
I’m a scientist.”
(font approvato dal CERN)
ResourceTypes ResourcesUsers Reservations
4 Tabelle
Tabelle? Non è DDD!
ResourceTypes ResourcesUsers Reservations
4 Tabelle
ResourceType ResourceUser Reservation
4 Aggregati
ResourceType ResourceUser Reservation
4 Aggregati
ResourceType
Resource
User
Reservation
Aggregati
Value Objects
+
Tana!
(il pattern dei pattern)
e all’improvviso…
“Non l’abbiamo
evidenziato perché è
scontato che il software
lo faccia”
“Dobbiamo fare un
sistema migliore del
precedente, con più
funzionalità”
Statistiche utente / risorsa / tipologia
L’auto è in officina
Il PC non è configurato
Alla fine di una riunione la sala deve ...
Aggiungiamo un flag
Storicizziamo il dato
Gestiamo l’eccezione
Iniettiamo un servizio…
“Iniziamo con
qualcosa di semplice”
“E mo’ ?”
“Molte di quelle che chiamiamo difficoltà
non ci paiono tali se non perché non ci
vogliam torre la briga di cercare i mezzi...
“Molte di quelle che chiamiamo difficoltà
non ci paiono tali se non perché non ci
vogliam torre la briga di cercare i mezzi...
Primo indizio…
Secondo indizio…
Statistiche utente / risorsa / tipologia
L’auto è in officina
Il PC non è configurato
Alla fine di una riunione la sala deve ...
Notifiche ad ogni evento
Terzo indizio…
You can’t connect the dots
looking forward;!
!
you can only connect them
looking backwards.
Luglio 2013
@ziobrando
La mia idea era quella di focalizzarci su Event Storming
o comunque su tecniche / trucchi / etc che facilitino la
modellaz...
…the whole thing exploded in summer 2013.
While I realised there was a lot of value in it, other
practitioners (Mathias Ve...
…the whole thing exploded in summer 2013.
While I realised there was a lot of value in it, other
practitioners (Mathias Ve...
Event Storming
is a workshop format for
Event Storming
quickly exploring complex business domains
proviamo a cambiare
il punto di vista
ALÅM AEKI
IKEA MÅLA
Le informazioni giuste..
http://blog.avanscoperta.it/it/2014/05/07/eventstorming-invite-the-right-people/
in poco tempo
valgono

un sacco*
* [sàc-co] s.m. - fig. fam. Ingente quantità, numero elevato
costano solo

21,87€*
* facilitatore non incluso nella confezione. Può creare Crea dipendenza.
Scegliete la parete più lunga
+
Il tempo scorre in questa direzione
Un pennarello a testa
Iniziamo a scrivere!
Domain
Event
Rappresenta qualcosa di
significativo accaduto nel
dominio.
Domain
Event
Richiesta

Approvata
Attacchiamo i primi eventi disponendoli sull’asse temporale
Richiesta

Approvata
Richiesta

Confermata
Richiesta

Respinta
Pro Tip

I post-it non si correggono
Command
Indica l’intento dell’utente
Command
Approva

Richiesta
Associamo ad ogni evento il comando relativo.
Approva

Richiesta
Pro Tip

Identificate chi attiva il comando
Pro Tip

Ogni tanto fate finta di non aver
capito… vogliamo osservare la
reazione dei partecipanti!
Read Model
Rappresenta il supporto
decisionale per l’utente
Read Model
Lista delle
attrezzature
disponibili
Il readmodel aiuta ad identificare le informazioni
necessarie all’utente per prendere decisioni
Lista delle attrezzature
di...
Ubiquitous
language
Definisce con precisione il
significato di ogni termine
Ubiquitous
language
Attrezzatura

Bene materiale
oggetto di
prenotazione
Attrezzatura

Bene materiale oggetto di
prenotazione
ambiguitàconvergenza sul significato dei termini
Defrag
Aggreghiamo i post-it
Defrag
Aggregato Aggregato
Bounded Context
Aggregato
Bounded Context
Invarianti
Sono le regole che non
possiamo violare
Invarianti
Non sono ammesse
prenotazioni
sovrapposte per
singola attrezzatura.
Aggregato Aggregato
Bounded Context
Aggregato
Bounded Context
Non sono ammesse
prenotazioni sovrapposte
per singola attrez...
Pro Tip

Seguite il gruppo Eventstormers
https://plus.google.com/communities/
113258571348605620818
Problema smontato!
Ma non compila
http://xkcd.com/844/
Event Sourcing
“Capture all changes to an application state as a
sequence of events.”
Event Sourcing
http://martinfowler.com/eaaDev/Event...
Risorsa

Censita
Risorsa

resa
disponibile
Prenotazione

Inserita
Prenotazione

Approvata
Prenotazione

Inserita
Prenotazi...
Title : ”Budget 2014 - IT”,

LastModified : “2013-09-15”,

Tags : [],"
Author: “Board of Directors”,"
PublishedBy: null,

...
15
Settembre
2013
16
Settembre
2013
12
Dicembre
2013
5
Gennaio
2014
6
Maggio
2014
CQRS
CQRS
“At its heart is a simple notion that you can use a
different model to update information than the model you
use to r...
Business Logic
Decision support system
IL database è una presenza aliena nel dominio
per molti è l’unica fonte di verità
per altri è il freno all’evoluzione del ...
Query
CommandBusiness Logic
Decision support system
Command
Query
Estendiamo

Event Storming
Transizioni
Esploriamo le relazioni
tra comandi ed eventi
Transizioni
Aggregato Aggregato
Bounded Context
Aggregato
Bounded Context
Aggregato
if()
if()
Process

manager
Rappresenta un processo di
business complesso
Process

manager
Assegnazione
attrezzatura
Assegnazione
attrezzatura
Command Query Responsibility Segregation
Command
Process
Manager
Event
Event
Aggregate
Projections
Query
Model
Query
Model
Assegnazione
attrezzatura
Ma non compila ?
Assegnazione
attrezzatura
Lista delle attrezzature
disponibili
Approva

Richiesta
Richiesta

Approvata
Non sono ammesse
pr...
AssegnazioneAttrezzature
!
(process)
AttrezzatureDisponibili
!
(model)
ApprovaRichiesta
!
(command)
RichiestaApprovata
!
(...
Ok, bel pistolotto…
ma ha funzionato?
ReadModel
NEventStore
Intranet
Auth
Tools
Collaboration
DMS
Process"
Manager
Projections
MVC

WebApi
SignalR
Indexer
PdfPi...
grazie!
www.slideshare.net/andreabalducci
feedback => andrea.balducci@prxm.it
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Upcoming SlideShare
Loading in …5
×

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

1,072 views
989 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

×