SlideShare una empresa de Scribd logo
1 de 92
Descargar para leer sin conexión
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
@andreabalducci
#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!2
Il nostro dominio
ha una storia
da raccontare…
!3
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
…ma spesso ci
accontentiamo
dei titoli di coda
!4
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!5
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
..invece di guardare
tutta la storia.
!6
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!7
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Quante informazioni
perdiamo ?
!8
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Il saldo è 6.684€
!9
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
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
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
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
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
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
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
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
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
Event Sourcing?


!12
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Event Sourcing?

ne ho sentito parlare…

!12
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Dominio
!13
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Aggregato

DB
ORM

Risorsa_1

Proprietà
Richiesta_1

Richiesta_2

Utente_1

Metodi
Risorsa_2

!14
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
ok.. basta una
tabella di log
!15
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
basta

!16
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
basta
duplicare tutte le strutture dati

!16
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
basta
duplicare tutte le strutture dati
tenere tutto sincronizzato

!16
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
basta
duplicare tutte le strutture dati
tenere tutto sincronizzato
versionare tutto

!16
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
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
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
basta uno storage
ad eventi
!17
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
NEventStore
A persistence agnostic Event Store for .NET

http://neventstore.org/

!18
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
CommonDomain
la “colla” tra DDD e NEventStore

!19
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Aggregato

DB
ORM

Risorsa_1

Proprietà
Richiesta_1

Richiesta_2

Utente_1

Metodi
Risorsa_2

!20
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
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
Evento
Chi
Quando
Dove
Cosa
Perché

!22
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
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
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
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
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
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
Command

State

!26
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
ubiquitous language

Interrogazione

Command

State

!26
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Domain

Exception

ubiquitous language

Interrogazione

Command

State

!26
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Domain

Exception

ubiquitous language

Interrogazione

Command

Event (ok)

State

!26
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Domain

Exception

ubiquitous language

Interrogazione

Command

Event (ko)

Event (ok)

State

!26
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Domain

Exception

ubiquitous language

Interrogazione

Command

Event (ko)

Event (ok)

Router

State

!26
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Svantaggi
!27
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Quantità di codice
dipende..

!28
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Quantità di codice
tanto

!28
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Quantità di codice
tanto
ma dannatamente semplice
!28
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Vantaggi
!29
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Focus su
struttura dati

!30
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Focus su
comportamento

!30
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Focus su
comportamento
business value
!30
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Decisioni prese su
stato (stale)

!31
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Decisioni prese su
stato corrente

!31
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Decisioni prese su
stato corrente
by design
!31
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Costo di implementazione
esponenziale

!32
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Costo di implementazione
lineare

!32
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Costo di implementazione
lineare
eventi++
!32
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Testing
complesso

!33
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Testing
facile

!33
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Testing
facile
stato -> comando -> eventi
!33
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Collisioni
transazioni (tutto o niente)

!34
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Collisioni
merge intelligenti / replay

!34
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Collisioni
merge intelligenti / replay
by design
!34
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Integrabilità
batch / etl / ws ad hoc / trigger

!35
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Integrabilità
evento -> subscriber

!35
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Integrabilità
evento -> subscriber
push o pull
!35
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!36
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!37
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!38
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!38
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!38
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!38
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Nei test runner diventa

!39
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Join the dots
!40
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!41
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Register
Resource

Resource
Registered

!42
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!43
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!44
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!45
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
stato

Handler eventi

Interrogazioni allo stato in UL

!46
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!47
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!48
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!49
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!50
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!51
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!52
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Ricapitolando

!53
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Event Storming

Common

Domain

NEventStore

DDD

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Machine
Specifications

!53
http://github.com/andreabalducci/cdays14

!54
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
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

Más contenido relacionado

Más de Andrea Balducci

Más de Andrea Balducci (17)

Agile Industry 4.0 - IoT Day 2019
Agile Industry 4.0 - IoT Day 2019Agile Industry 4.0 - IoT Day 2019
Agile Industry 4.0 - IoT Day 2019
 
Inception
InceptionInception
Inception
 
Stranger Streams | NStore @ DevMarche
Stranger Streams | NStore @ DevMarcheStranger Streams | NStore @ DevMarche
Stranger Streams | NStore @ DevMarche
 
Event based modelling and prototyping
Event based modelling and prototypingEvent based modelling and prototyping
Event based modelling and prototyping
 
Storage dei dati con MongoDB
Storage dei dati con MongoDBStorage dei dati con MongoDB
Storage dei dati con MongoDB
 
Italian Agile Days 2016 - Modellathon
Italian Agile Days 2016 - ModellathonItalian Agile Days 2016 - Modellathon
Italian Agile Days 2016 - Modellathon
 
Open domus 2016
Open domus 2016Open domus 2016
Open domus 2016
 
Oktober webfest
Oktober webfestOktober webfest
Oktober webfest
 
TypeScript intro / mobile dev camp
TypeScript intro / mobile dev campTypeScript intro / mobile dev camp
TypeScript intro / mobile dev camp
 
Typescript intro
Typescript introTypescript intro
Typescript intro
 
Alam aeki 2015
Alam aeki 2015Alam aeki 2015
Alam aeki 2015
 
Mongo db halloween party
Mongo db halloween partyMongo db halloween party
Mongo db halloween party
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
 
Intel AppUp Day Bologna
Intel AppUp Day BolognaIntel AppUp Day Bologna
Intel AppUp Day Bologna
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
 
Introduzione ai framework ioc
Introduzione ai framework iocIntroduzione ai framework ioc
Introduzione ai framework ioc
 
jQuery Ecosystem
jQuery EcosystemjQuery Ecosystem
jQuery Ecosystem
 

Event Sourcing con NEventStore