Upload
andrea-balducci
View
357
Download
3
Embed Size (px)
DESCRIPTION
Estratto tecnico del talk http://lanyrd.com/2014/cdays14/scxbbf/ fatto a quattro mani con @ziobrando
Citation preview
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!2@andreabalducci
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!3
Il nostro dominio ha una storia
da raccontare…
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!4
…ma spesso ci accontentiamo dei titoli di coda
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!5
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!6
..invece di guardare tutta la storia.
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!7
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!8
Quante informazioni perdiamo ?
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Il saldo è 6.684€
!9
#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
#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
#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
#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
#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
#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
#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
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!12
Event Sourcing?
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!12
Event Sourcing?ne ho sentito parlare…
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Dominio
!13
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!14
Proprietà
Metodi
ORM
DB
Risorsa_1
Richiesta_1
Richiesta_2
Utente_1
Risorsa_2
Aggregato
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
ok.. basta una tabella di log
!15
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!16
basta
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!16
bastaduplicare tutte le strutture dati
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!16
bastaduplicare tutte le strutture datitenere tutto sincronizzato
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!16
bastaduplicare tutte le strutture datitenere tutto sincronizzatoversionare tutto
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!16
bastaduplicare tutte le strutture datitenere tutto sincronizzatoversionare tuttoun bel flag “comando io”
#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”
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!17
basta uno storage ad eventi
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
NEventStoreA persistence agnostic Event Store for .NET
http://neventstore.org/
!18
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
CommonDomainla “colla” tra DDD e NEventStore
!19
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!20
Proprietà
Metodi
ORM
DB
Risorsa_1
Richiesta_1
Richiesta_2
Utente_1
Risorsa_2
Aggregato
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!22
Evento
Quando
Cosa
Chi
Perché
Dove
#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
#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
#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));
#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
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!26
Command
State
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!26
Command
State
Inte
rrog
azio
ne
ubiq
uito
us la
ngua
ge
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!26
Command
State
DomainException
Inte
rrog
azio
ne
ubiq
uito
us la
ngua
ge
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!26
Command
Event (ok)
State
DomainException
Inte
rrog
azio
ne
ubiq
uito
us la
ngua
ge
#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
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!27
Svantaggi
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
dipende..
!28
Quantità di codice
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!28
tantoQuantità di codice
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!28
tantoQuantità di codice
ma dannatamente semplice
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!29
Vantaggi
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!30
Focus sustruttura dati
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!30
Focus sucomportamento
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!30
Focus sucomportamentobusiness value
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!31
Decisioni prese sustato (stale)
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
stato corrente
!31
Decisioni prese su
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
stato corrente
!31
Decisioni prese su
by design
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
esponenziale
!32
Costo di implementazione
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!32
Costo di implementazionelineare
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!32
Costo di implementazionelineare
eventi++
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!33
complessoTesting
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!33
Testingfacile
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!33
Testingfacile
stato -> comando -> eventi
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!34
transazioni (tutto o niente)Collisioni
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!34
Collisionimerge intelligenti / replay
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!34
Collisionimerge intelligenti / replay
by design
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!35
batch / etl / ws ad hoc / triggerIntegrabilità
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!35
Integrabilitàevento -> subscriber
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!35
Integrabilitàevento -> subscriber
push o pull
#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
!39
Nei test runner diventa
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!40
Join the dots
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!41
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!42
Register Resource
Resource Registered
#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
!46
stato
Handler eventi
Interrogazioni allo stato in UL
#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
!53
Ricapitolando
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!53
NEventStore Common Domain
Machine Specifications
Event Storming
DDD
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
!54
http://github.com/andreabalducci/cdays14
#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