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

144
ALÅM AEKI guida illustrata all’esplorazione di un dominio con EventSourcing + EventStorming

description

Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming. DDD Saturdaty 2014 @ Pordenone

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

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

ALÅM AEKIguida illustrata all’esplorazione di un dominio con

EventSourcing + EventStorming

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

Agenda

Selfie Gatto

Citazione personaggio famoso

GIF AnimateCitazioni film

xkcd

Citazione letteraria

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

@andreabalducci

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

Artigiani del software

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

Intranet 2.0

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

10+filiali

100+utenti

250.000+pagine

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

Documentale

Enterprise Search

Calendari Personali e Condivisi

Ticket di assistenzaRichieste POS

Richieste WebBanking

Rubrica dinamica

Prenotazione attrezzature

Statistiche

Link Utili

Organigramma

Censimento IT

Single Sign-on

Pubblicazione ProdottiNotifiche pushChat

Scambio files

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

Fare tutto …

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

… per il primo rilascio …

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

… perché …

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

… dobbiamo fare una sorpresa agli utenti.

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

Ricapitolando

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

Ricapitolando

Ambito applicativo esteso

Tempo limitato

Gruppo di lavoro ristretto

Switch “Big Bang” dai sistemi in uso

Cliente Enterprise

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

Le condizioni ideali

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

solo per Schrödinger

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

x nessun gatto ha subito maltrattamenti nella realizzazione di questa applicazione.

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

Consigli?

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

Ok, let’s do it!

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

So

che lo

state pensando

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

Iniziamo con qualcosa di semplice

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

Prenotazione attrezzature

Page 25: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 26: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 27: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 28: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 29: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 30: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming

“Nothing surprises me; I’m a scientist.”

(font approvato dal CERN)

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

ResourceTypes ResourcesUsers Reservations

4 Tabelle

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

Tabelle? Non è DDD!

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

ResourceTypes ResourcesUsers Reservations

4 Tabelle

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

ResourceType ResourceUser Reservation

4 Aggregati

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

ResourceType ResourceUser Reservation

4 Aggregati

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

ResourceType

Resource

User

Reservation

Aggregati

Value Objects+

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

Tana!(il pattern dei pattern)

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

e all’improvviso…

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

“Non l’abbiamo evidenziato perché è

scontato che il software lo faccia”

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

“Dobbiamo fare un sistema migliore del precedente, con più

funzionalità”

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

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

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

Aggiungiamo un flag

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

Storicizziamo il dato

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

Gestiamo l’eccezione

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

Iniettiamo un servizio…

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

“Iniziamo con qualcosa di semplice”

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

“E mo’ ?”

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

“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

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

“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

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

Primo indizio…

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

Secondo indizio…

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

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

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

Notifiche ad ogni evento

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

Terzo indizio…

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

You can’t connect the dots looking forward;!!

you can only connect them looking backwards.

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

Luglio 2013

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

@ziobrando

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

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.

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

…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

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

…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

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

Event Storming

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

is a workshop format for

Event Storming

quickly exploring complex business domains

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

proviamo a cambiare il punto di vista

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

ALÅM AEKI

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

IKEA MÅLA

Page 69: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 70: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 71: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Page 72: [Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming

Le informazioni giuste..

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

http://blog.avanscoperta.it/it/2014/05/07/eventstorming-invite-the-right-people/

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

in poco tempo

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

valgono un sacco*

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

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

costano solo21,87€*

* facilitatore non incluso nella confezione. Può creare Crea dipendenza.

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

Scegliete la parete più lunga

+

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

Il tempo scorre in questa direzione

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

Un pennarello a testa

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

Iniziamo a scrivere!

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

Domain Event

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

Rappresenta qualcosa di significativo accaduto nel

dominio.

Domain Event

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

RichiestaApprovata

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

Attacchiamo i primi eventi disponendoli sull’asse temporale

RichiestaApprovata

RichiestaConfermata

RichiestaRespinta

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

Pro TipI post-it non si correggono

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

Command

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

Indica l’intento dell’utente

Command

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

ApprovaRichiesta

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

Associamo ad ogni evento il comando relativo.

ApprovaRichiesta

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

Pro TipIdentificate chi attiva il comando

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

Pro TipOgni tanto fate finta di non aver capito… vogliamo osservare la reazione dei partecipanti!

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

Read Model

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

Rappresenta il supporto decisionale per l’utente

Read Model

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

Lista delle attrezzature disponibili

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

Il readmodel aiuta ad identificare le informazioni necessarie all’utente per prendere decisioni

Lista delle attrezzature disponibili

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

Ubiquitous language

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

Definisce con precisione il significato di ogni termine

Ubiquitous language

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

Attrezzatura Bene materiale

oggetto di prenotazione

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

Attrezzatura Bene materiale oggetto di

prenotazione

ambiguitàconvergenza sul significato dei termini

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

Defrag

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

Aggreghiamo i post-it

Defrag

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

Aggregato Aggregato

Bounded Context

Aggregato

Bounded Context

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

Invarianti

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

Sono le regole che non possiamo violare

Invarianti

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

Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.

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

Aggregato Aggregato

Bounded Context

Aggregato

Bounded Context

Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.

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

Pro TipSeguite il gruppo Eventstormers

https://plus.google.com/communities/113258571348605620818

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

Problema smontato!

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

Ma non compila

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

http://xkcd.com/844/

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

Event Sourcing

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

“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

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

Risorsa Censita

Risorsa resa

disponibile

Prenotazione Inserita

Prenotazione Approvata

Prenotazione Inserita

Prenotazione Confermata

Prenotazione Non

Approvata

Risorsa Dismessa

Risorsa_1 Prenotazione_1 Prenotazione_2

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

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

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

15 Settembre

2013

16 Settembre

2013

12 Dicembre

2013

5 Gennaio

2014

6 Maggio

2014

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

CQRS

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

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

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

Business Logic

Decision support system

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

IL database è una presenza aliena nel dominioper molti è l’unica fonte di veritàper altri è il freno all’evoluzione del sistema

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

Query

CommandBusiness Logic

Decision support system

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

Command

Query

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

EstendiamoEvent Storming

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

Transizioni

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

Esploriamo le relazioni tra comandi ed eventi

Transizioni

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

Aggregato Aggregato

Bounded Context

Aggregato

Bounded Context

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

Aggregato

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

if()

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

if()

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

Processmanager

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

Rappresenta un processo di business complesso

Processmanager

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

Assegnazione attrezzatura

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

Assegnazione attrezzatura

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

Command Query Responsibility Segregation

Command

Process Manager

Event

Event

Aggregate

Projections

Query Model

Query Model

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

Assegnazione attrezzatura

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

Ma non compila ?

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

Assegnazione attrezzatura

Lista delle attrezzature disponibili

ApprovaRichiesta

RichiestaApprovata

Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.

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

AssegnazioneAttrezzature !

(process)

AttrezzatureDisponibili !

(model)

ApprovaRichiesta !

(command)

RichiestaApprovata !

(event)

VietaPrenotazioniSovrapposte !

(business rule)

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

Ok, bel pistolotto… ma ha funzionato?

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

ReadModel

NEventStore

IntranetAuthToolsCollaboration

DMS

Process"Manager

Projections

MVC WebApi

SignalR

IndexerPdfPipelineOfficePipeline

msg

query

pushhttp

write

eventcommand

CQRS + ES

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

grazie!www.slideshare.net/andreabalducci

feedback => [email protected]