[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 660 views

Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming.

Guida illustrata alla modellazione di un dominio con Event Sourcing & Event Storming.

DDD Saturdaty 2014 @ Pordenone

Statistics

Views

Total Views
660
Views on SlideShare
650
Embed Views
10

Actions

Likes
5
Downloads
16
Comments
0

4 Embeds 10

http://plus.url.google.com 4
https://twitter.com 3
http://www.slideee.com 2
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • ALÅM AEKI guida illustrata all’esplorazione di un dominio con
 EventSourcing + EventStorming
    • Agenda Selfie Gatto Citazione personaggio famoso GIF AnimateCitazioni film xkcd Citazione letteraria
    • @andreabalducci
    • Artigiani del software
    • Intranet 2.0
    • 10+ filiali 100+ utenti 250.000+ pagine
    • Documentale Enterprise Search Calendari Personali e Condivisi Ticket di assistenza Richieste POS Richieste WebBanking Rubrica dinamica Prenotazione attrezzature Statistiche Link Utili Organigramma Censimento IT Single Sign-on Pubblicazione ProdottiNotifiche push Chat Scambio files
    • Fare tutto …
    • … per il primo rilascio …
    • … perché …
    • … dobbiamo fare una sorpresa agli utenti.
    • Ricapitolando
    • Ricapitolando Ambito applicativo esteso Tempo limitato Gruppo di lavoro ristretto Switch “Big Bang” dai sistemi in uso Cliente Enterprise
    • Le condizioni ideali
    • solo per Schrödinger
    • x nessun gatto ha subito maltrattamenti nella realizzazione di questa applicazione.
    • Consigli?
    • Ok, let’s do it!
    • So che lo state pensando
    • Iniziamo con qualcosa di semplice
    • Prenotazione attrezzature
    • “Nothing surprises me; I’m a scientist.” (font approvato dal CERN)
    • ResourceTypes ResourcesUsers Reservations 4 Tabelle
    • Tabelle? Non è DDD!
    • ResourceTypes ResourcesUsers Reservations 4 Tabelle
    • ResourceType ResourceUser Reservation 4 Aggregati
    • ResourceType ResourceUser Reservation 4 Aggregati
    • ResourceType Resource User Reservation Aggregati Value Objects +
    • Tana! (il pattern dei pattern)
    • e all’improvviso…
    • “Non l’abbiamo evidenziato perché è scontato che il software lo faccia”
    • “Dobbiamo fare un sistema migliore del precedente, con più funzionalità”
    • 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
    • Aggiungiamo un flag
    • Storicizziamo il dato
    • Gestiamo l’eccezione
    • Iniettiamo un servizio…
    • “Iniziamo con qualcosa di semplice”
    • “E mo’ ?”
    • “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
    • “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
    • Primo indizio…
    • Secondo indizio…
    • 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
    • Notifiche ad ogni evento
    • Terzo indizio…
    • You can’t connect the dots looking forward;! ! you can only connect them looking backwards.
    • Luglio 2013
    • @ziobrando
    • 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.
    • …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
    • …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
    • Event Storming
    • is a workshop format for Event Storming quickly exploring complex business domains
    • proviamo a cambiare il punto di vista
    • ALÅM AEKI
    • IKEA MÅLA
    • Le informazioni giuste..
    • http://blog.avanscoperta.it/it/2014/05/07/eventstorming-invite-the-right-people/
    • in poco tempo
    • valgono
 un sacco* * [sàc-co] s.m. - fig. fam. Ingente quantità, numero elevato
    • costano solo
 21,87€* * facilitatore non incluso nella confezione. Può creare Crea dipendenza.
    • Scegliete la parete più lunga +
    • Il tempo scorre in questa direzione
    • Un pennarello a testa
    • Iniziamo a scrivere!
    • Domain Event
    • Rappresenta qualcosa di significativo accaduto nel dominio. Domain Event
    • Richiesta
 Approvata
    • Attacchiamo i primi eventi disponendoli sull’asse temporale Richiesta
 Approvata Richiesta
 Confermata Richiesta
 Respinta
    • Pro Tip
 I post-it non si correggono
    • Command
    • Indica l’intento dell’utente Command
    • Approva
 Richiesta
    • Associamo ad ogni evento il comando relativo. Approva
 Richiesta
    • Pro Tip
 Identificate chi attiva il comando
    • Pro Tip
 Ogni tanto fate finta di non aver capito… vogliamo osservare la reazione dei partecipanti!
    • Read Model
    • Rappresenta il supporto decisionale per l’utente Read Model
    • Lista delle attrezzature disponibili
    • Il readmodel aiuta ad identificare le informazioni necessarie all’utente per prendere decisioni Lista delle attrezzature disponibili
    • Ubiquitous language
    • Definisce con precisione il significato di ogni termine Ubiquitous language
    • Attrezzatura
 Bene materiale oggetto di prenotazione
    • Attrezzatura
 Bene materiale oggetto di prenotazione ambiguitàconvergenza sul significato dei termini
    • Defrag
    • Aggreghiamo i post-it Defrag
    • Aggregato Aggregato Bounded Context Aggregato Bounded Context
    • Invarianti
    • Sono le regole che non possiamo violare Invarianti
    • Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.
    • Aggregato Aggregato Bounded Context Aggregato Bounded Context Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.
    • Pro Tip
 Seguite il gruppo Eventstormers https://plus.google.com/communities/ 113258571348605620818
    • Problema smontato!
    • Ma non compila
    • http://xkcd.com/844/
    • Event Sourcing
    • “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
    • Risorsa
 Censita Risorsa
 resa disponibile Prenotazione
 Inserita Prenotazione
 Approvata Prenotazione
 Inserita Prenotazione
 Confermata Prenotazione
 Non Approvata Risorsa
 Dismessa Risorsa_1 Prenotazione_1 Prenotazione_2
    • 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
    • 15 Settembre 2013 16 Settembre 2013 12 Dicembre 2013 5 Gennaio 2014 6 Maggio 2014
    • CQRS
    • 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
    • Business Logic Decision support system
    • IL database è una presenza aliena nel dominio per molti è l’unica fonte di verità per altri è il freno all’evoluzione del sistema
    • Query CommandBusiness Logic Decision support system
    • Command Query
    • Estendiamo
 Event Storming
    • Transizioni
    • Esploriamo le relazioni tra comandi ed eventi Transizioni
    • Aggregato Aggregato Bounded Context Aggregato Bounded Context
    • Aggregato
    • if()
    • if()
    • Process
 manager
    • Rappresenta un processo di business complesso Process
 manager
    • Assegnazione attrezzatura
    • Assegnazione attrezzatura
    • Command Query Responsibility Segregation Command Process Manager Event Event Aggregate Projections Query Model Query Model
    • Assegnazione attrezzatura
    • Ma non compila ?
    • Assegnazione attrezzatura Lista delle attrezzature disponibili Approva
 Richiesta Richiesta
 Approvata Non sono ammesse prenotazioni sovrapposte per singola attrezzatura.
    • AssegnazioneAttrezzature ! (process) AttrezzatureDisponibili ! (model) ApprovaRichiesta ! (command) RichiestaApprovata ! (event) VietaPrenotazioniSovrapposte ! (business rule)
    • Ok, bel pistolotto… ma ha funzionato?
    • ReadModel NEventStore Intranet Auth Tools Collaboration DMS Process" Manager Projections MVC
 WebApi SignalR Indexer PdfPipeline OfficePipeline msg query pushhttp write eventcommand CQRS + ES
    • grazie! www.slideshare.net/andreabalducci feedback => andrea.balducci@prxm.it