event sourcing con neventstore

Post on 01-Nov-2014

356 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

#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

top related