event sourcing con neventstore

92
#CDays14 – Milano 25, 26 e 27 Febbraio 2014 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-postit- test-verdi 1

Upload: andrea-balducci

Post on 01-Nov-2014

358 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

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-postit-test-verdi

!1

Page 2: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!2@andreabalducci

Page 3: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!3

Il nostro dominio ha una storia

da raccontare…

Page 4: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!4

…ma spesso ci accontentiamo dei titoli di coda

Page 5: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!5

Page 6: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!6

..invece di guardare tutta la storia.

Page 7: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!7

Page 8: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!8

Quante informazioni perdiamo ?

Page 9: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Il saldo è 6.684€

!9

Page 10: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!10

Data Dare Avere Descrizione operazione3/2 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 Saldo al 22/2 : 6.684

Page 11: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!11

Data Dare Avere Descrizione operazione3/2 160 Supermercato Le Fornaci - Castelfidardo4/2 1.500 ACME Spa - Stipendio Gennaio4/2 1.400 ACME Spa - Stipendio Gennaio

10/2 180 Supermercato Le Fornaci - Castelfidardo12/2 200 Mediaworld Ancona12/2 180 Pittarello Ancona14/2 80 Ristorante Osteria da Pippo17/2 200 IperSimply- Castelfidardo20/2 16 Autostrade Spa - Casello Bologna20/2 300 Mediaworld Bologna20/2 320 Carpisa Bologna20/2 75 Hotel Bologna21/2 16 Autostrade Spa - Casello Ancona22/2 180 amazon.it22/2 200 zalando.it

2.107 2.900 Saldo al 22/2 : 6.684

Page 12: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!11

Data Dare Avere Descrizione operazione3/2 160 Supermercato Le Fornaci - Castelfidardo4/2 1.500 ACME Spa - Stipendio Gennaio4/2 1.400 ACME Spa - Stipendio Gennaio

10/2 180 Supermercato Le Fornaci - Castelfidardo12/2 200 Mediaworld Ancona12/2 180 Pittarello Ancona14/2 80 Ristorante Osteria da Pippo17/2 200 IperSimply- Castelfidardo20/2 16 Autostrade Spa - Casello Bologna20/2 300 Mediaworld Bologna20/2 320 Carpisa Bologna20/2 75 Hotel Bologna21/2 16 Autostrade Spa - Casello Ancona22/2 180 amazon.it22/2 200 zalando.it

2.107 2.900 Saldo al 22/2 : 6.684

Due personeStessa Azienda

Page 13: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!11

Data Dare Avere Descrizione operazione3/2 160 Supermercato Le Fornaci - Castelfidardo4/2 1.500 ACME Spa - Stipendio Gennaio4/2 1.400 ACME Spa - Stipendio Gennaio

10/2 180 Supermercato Le Fornaci - Castelfidardo12/2 200 Mediaworld Ancona12/2 180 Pittarello Ancona14/2 80 Ristorante Osteria da Pippo17/2 200 IperSimply- Castelfidardo20/2 16 Autostrade Spa - Casello Bologna20/2 300 Mediaworld Bologna20/2 320 Carpisa Bologna20/2 75 Hotel Bologna21/2 16 Autostrade Spa - Casello Ancona22/2 180 amazon.it22/2 200 zalando.it

2.107 2.900 Saldo al 22/2 : 6.684

Due personeStessa Azienda

Carnivori

Page 14: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!11

Data Dare Avere Descrizione operazione3/2 160 Supermercato Le Fornaci - Castelfidardo4/2 1.500 ACME Spa - Stipendio Gennaio4/2 1.400 ACME Spa - Stipendio Gennaio

10/2 180 Supermercato Le Fornaci - Castelfidardo12/2 200 Mediaworld Ancona12/2 180 Pittarello Ancona14/2 80 Ristorante Osteria da Pippo17/2 200 IperSimply- Castelfidardo20/2 16 Autostrade Spa - Casello Bologna20/2 300 Mediaworld Bologna20/2 320 Carpisa Bologna20/2 75 Hotel Bologna21/2 16 Autostrade Spa - Casello Ancona22/2 180 amazon.it22/2 200 zalando.it

2.107 2.900 Saldo al 22/2 : 6.684

Due personeStessa Azienda

Carnivori

Auto senza telepass

Page 15: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!11

Data Dare Avere Descrizione operazione3/2 160 Supermercato Le Fornaci - Castelfidardo4/2 1.500 ACME Spa - Stipendio Gennaio4/2 1.400 ACME Spa - Stipendio Gennaio

10/2 180 Supermercato Le Fornaci - Castelfidardo12/2 200 Mediaworld Ancona12/2 180 Pittarello Ancona14/2 80 Ristorante Osteria da Pippo17/2 200 IperSimply- Castelfidardo20/2 16 Autostrade Spa - Casello Bologna20/2 300 Mediaworld Bologna20/2 320 Carpisa Bologna20/2 75 Hotel Bologna21/2 16 Autostrade Spa - Casello Ancona22/2 180 amazon.it22/2 200 zalando.it

2.107 2.900 Saldo al 22/2 : 6.684

Due personeStessa Azienda

Carnivori

Auto senza telepass

Lui & Lei

Page 16: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!11

Data Dare Avere Descrizione operazione3/2 160 Supermercato Le Fornaci - Castelfidardo4/2 1.500 ACME Spa - Stipendio Gennaio4/2 1.400 ACME Spa - Stipendio Gennaio

10/2 180 Supermercato Le Fornaci - Castelfidardo12/2 200 Mediaworld Ancona12/2 180 Pittarello Ancona14/2 80 Ristorante Osteria da Pippo17/2 200 IperSimply- Castelfidardo20/2 16 Autostrade Spa - Casello Bologna20/2 300 Mediaworld Bologna20/2 320 Carpisa Bologna20/2 75 Hotel Bologna21/2 16 Autostrade Spa - Casello Ancona22/2 180 amazon.it22/2 200 zalando.it

2.107 2.900 Saldo al 22/2 : 6.684

Due personeStessa Azienda

Lei compra entro un’ora da lui

Carnivori

Auto senza telepass

Lui & Lei

Page 17: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!11

Data Dare Avere Descrizione operazione3/2 160 Supermercato Le Fornaci - Castelfidardo4/2 1.500 ACME Spa - Stipendio Gennaio4/2 1.400 ACME Spa - Stipendio Gennaio

10/2 180 Supermercato Le Fornaci - Castelfidardo12/2 200 Mediaworld Ancona12/2 180 Pittarello Ancona14/2 80 Ristorante Osteria da Pippo17/2 200 IperSimply- Castelfidardo20/2 16 Autostrade Spa - Casello Bologna20/2 300 Mediaworld Bologna20/2 320 Carpisa Bologna20/2 75 Hotel Bologna21/2 16 Autostrade Spa - Casello Ancona22/2 180 amazon.it22/2 200 zalando.it

2.107 2.900 Saldo al 22/2 : 6.684

Due personeStessa Azienda

24/2 spesa a Castelfidardo Lei compra entro

un’ora da lui

Carnivori

Auto senza telepass

Lui & Lei

Page 18: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!12

Event Sourcing?

Page 19: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!12

Event Sourcing?ne ho sentito parlare…

Page 20: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Dominio

!13

Page 21: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!14

Proprietà

Metodi

ORM

DB

Risorsa_1

Richiesta_1

Richiesta_2

Utente_1

Risorsa_2

Aggregato

Page 22: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

ok.. basta una tabella di log

!15

Page 23: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!16

basta

Page 24: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!16

bastaduplicare tutte le strutture dati

Page 25: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!16

bastaduplicare tutte le strutture datitenere tutto sincronizzato

Page 26: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!16

bastaduplicare tutte le strutture datitenere tutto sincronizzatoversionare tutto

Page 27: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!16

bastaduplicare tutte le strutture datitenere tutto sincronizzatoversionare tuttoun bel flag “comando io”

Page 28: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!16

bastaduplicare tutte le strutture datitenere tutto sincronizzato

mapping! mapping! mapping! (cit)

versionare tuttoun bel flag “comando io”

Page 29: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!17

basta uno storage ad eventi

Page 30: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

NEventStoreA persistence agnostic Event Store for .NET

http://neventstore.org/

!18

Page 31: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

CommonDomainla “colla” tra DDD e NEventStore

!19

Page 32: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!20

Proprietà

Metodi

ORM

DB

Risorsa_1

Richiesta_1

Richiesta_2

Utente_1

Risorsa_2

Aggregato

Page 33: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!21

Stato

Comandi

Eventi

Aggregato

Common Domain

Richiesta Creata

Richiesta Approvata

Prenotazione Confermata

PrenotazioneRespinta

Risorsa Acquistata

Risorsa Dismessa

EventStore

Page 34: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!22

Evento

Quando

Cosa

Chi

Perché

Dove

Page 35: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!23

Evento

Quando

Cosa

Chi

Perché

Dove

Timestamp: 2014-02-25T15:45

Headers: User_1

Aggregato: Presentazione

Slide Attiva: 1

PresentazioneIniziata

Page 36: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!24

Evento

Quando

Cosa

Chi

Perché

Dove

Timestamp: 2014-02-25T15:45

Headers: User_1

Aggregato: Presentazione

Slide Attiva: 1

PresentazioneIniziata

Page 37: Event Sourcing con NEventStore

#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));

Page 38: Event Sourcing con NEventStore

#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));

Commit

Event1

Event2

Headers

Store Commit

Page 39: Event Sourcing con NEventStore

#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));

Commit

Event1

Event2

Headers

Store Commit

Observers

Dispatch Commit

Projections

Process Managers

Clients

Page 40: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!26

Command

State

Page 41: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!26

Command

State

Inte

rrog

azio

ne

ubiq

uito

us la

ngua

ge

Page 42: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!26

Command

State

DomainException

Inte

rrog

azio

ne

ubiq

uito

us la

ngua

ge

Page 43: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!26

Command

Event (ok)

State

DomainException

Inte

rrog

azio

ne

ubiq

uito

us la

ngua

ge

Page 44: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!26

Command

Event (ko)Event (ok)

State

DomainException

Inte

rrog

azio

ne

ubiq

uito

us la

ngua

ge

Page 45: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!26

Command

Event (ko)Event (ok)

State

Router

DomainException

Inte

rrog

azio

ne

ubiq

uito

us la

ngua

ge

Page 46: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!27

Svantaggi

Page 47: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

dipende..

!28

Quantità di codice

Page 48: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!28

tantoQuantità di codice

Page 49: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!28

tantoQuantità di codice

ma dannatamente semplice

Page 50: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!29

Vantaggi

Page 51: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!30

Focus sustruttura dati

Page 52: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!30

Focus sucomportamento

Page 53: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!30

Focus sucomportamentobusiness value

Page 54: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!31

Decisioni prese sustato (stale)

Page 55: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

stato corrente

!31

Decisioni prese su

Page 56: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

stato corrente

!31

Decisioni prese su

by design

Page 57: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

esponenziale

!32

Costo di implementazione

Page 58: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!32

Costo di implementazionelineare

Page 59: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!32

Costo di implementazionelineare

eventi++

Page 60: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!33

complessoTesting

Page 61: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!33

Testingfacile

Page 62: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!33

Testingfacile

stato -> comando -> eventi

Page 63: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!34

transazioni (tutto o niente)Collisioni

Page 64: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!34

Collisionimerge intelligenti / replay

Page 65: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!34

Collisionimerge intelligenti / replay

by design

Page 66: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!35

batch / etl / ws ad hoc / triggerIntegrabilità

Page 67: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!35

Integrabilitàevento -> subscriber

Page 68: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!35

Integrabilitàevento -> subscriber

push o pull

Page 69: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!36

Page 70: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!37

Page 71: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!38

Page 72: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!38

Page 73: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!38

Page 74: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!38

Page 75: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!39

Nei test runner diventa

Page 76: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!40

Join the dots

Page 77: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!41

Page 78: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!42

Register Resource

Resource Registered

Page 79: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!43

Page 80: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!44

Page 81: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!45

Page 82: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!46

stato

Handler eventi

Interrogazioni allo stato in UL

Page 83: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!47

Page 84: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!48

Page 85: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!49

Page 86: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!50

Page 87: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!51

Page 88: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!52

Page 89: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!53

Ricapitolando

Page 90: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!53

NEventStore Common Domain

Machine Specifications

Event Storming

DDD

Page 91: Event Sourcing con NEventStore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

!54

http://github.com/andreabalducci/cdays14

Page 92: Event Sourcing con NEventStore

#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.”

!55Elogio alla community - @ste8