SlideShare a Scribd company logo
1 of 33
Download to read offline
martedì 27 novembre 12
Obiettivi


               Giungere ad un modello di un sistema
               complesso in tempi rapidi
               fare emergere i concetti fondamentali di
               Domain-Driven Design senza particolari
               prerequisiti.


martedì 27 novembre 12
martedì 27 novembre 12
In pratica...

               Srotoliamo un rotolone di carta sulla
               parete.
               Abbiamo a disposizione 25 metri lineari
               di spazio per modellare
               Lavoro collaborativo


martedì 27 novembre 12
Domain Events
                 Apparente parentela con un Activity Diagram
                         ...ma non stiamo facendo UML

                 Gli eventi non possono essere messi in discussione.
                 Sono avvenuti. Prendiamone atto.
                 Visione d’insieme

                 Tutti i team tendono a “partire per la tangente”
                 immaginando un dominio, invece che chiedere
                 all’esperto di dominio.
                         Il sistema reale potrebbe risultare molto più semplice

                         Il sistema reale potrebbe risultare molto più complesso
martedì 27 novembre 12
Dritta:


               ...la cosa è molto più interessante se
               esploriamo collaborativamente le aree
               che non conosciamo.
                         ...con l’esperto di dominio.

                         ... con esempi concreti.



martedì 27 novembre 12
martedì 27 novembre 12
origine degli eventi

               Gli eventi non nascono dal nulla:
                         alcuno nascono in risposta ad azioni degli
                         utenti

                         altri nascono in sistemi esterni

                         altri sono originati dallo scorrere del tempo

                         ...altri sono generati in risposta ad altri
                         eventi

martedì 27 novembre 12
martedì 27 novembre 12
martedì 27 novembre 12
Event Flow

               Ricerchiamo antefatti e conseguenze dei
               nostri eventi
               Il trucco del participio passato aiuta a
               chiarire la semantica:
                         “matrimonio” non è un evento (ma non ditelo a
                         vostra moglie/marito)

               Più attori entrano nel nostro sistema
martedì 27 novembre 12
martedì 27 novembre 12
Aggregates

               “Come definire correttamente gli
               aggregati?” questa è la questione che
               arrovella ogni DDD practitioner
                         fate un giro su DDD-IT, se non ci credete

               L’obiettivo di questo esperimento è di
               arrivare ad una loro definizione per una
               strada diversa dal solito

martedì 27 novembre 12
Definizione
               Un’aggregato rappresenta una unità di
               consistenza: un gruppo di oggetti il cui
               stato cambia simultaneamente.
                         ...ma così non è molto chiaro...

                           ...quanto sono grandi questi oggetti?

                           ...come sono fatti?

               Ha a che fare con i confini transazionali,
               ma non è detto che i nostri siano Ok.
martedì 27 novembre 12
Rule of thumb

               Per individuare cosa fa parte
               dell’aggregato possiamo pensare a
                         Informazioni che vengono cancellate assieme

                         Informazioni che vengono spostate assieme

                         Informazioni che vengono distribuite assieme


martedì 27 novembre 12
Invarianti

               Dimentichiamo il dato:
                         L’aggregato può accettare o rifiutare il
                         comando.
                           Sulla base di quali informazioni?

               Cosa è sempre garantito per il nostro
               aggregato?

martedì 27 novembre 12
martedì 27 novembre 12
Aggregati
               La prospettiva basata sulle invarianti
               aiuta a modellare correttamente gli
               aggregati
                         Mi limito ad una dimensione che posso
                         controllare

                         Propago le variazioni con Domain Events

                         Esploro correttamente il dominio

                         Il sistema è eventualmente consistente
martedì 27 novembre 12
Esempio
               Limite massimo di partecipanti per classe:
                         Da dove deriva?

                           Limite logistico aula? --> accetto e tratto per
                           una location più adatta

                           Limite fisiologico corso --> stand-by e tratto per
                           una nuova edizione

               Non impongo requisiti non presenti nel
               sistema
martedì 27 novembre 12
martedì 27 novembre 12
Subdomains
               Rappresentano la visione business del sistema
               Alcune porzioni sono fondamentali per la
               competitività della nostra azienda.
                         Es contenuti su web, marketing, quello che ci fa
                         vendere qualcosa in più.

               Altre sono semplicemente necessarie.
                         Es. fatturazione: serve, ma non avremo nessun
                         cliente un più per la bellezza ed il tempismo delle
                         nostre fatture.
martedì 27 novembre 12
Linguaggi
               In aziende di medie dimensioni i
               referenti sono diversi.
                         Hanno obiettivi diversi

                         Parlano lingue diverse

                         ...richiederanno modelli diversi

               Attenzione: non stiamo parlando
               (ancora) dei Bounded Contexts...
martedì 27 novembre 12
martedì 27 novembre 12
Bounded Contexts

               Evidenziano i diversi modelli in gioco
                         Applicazioni software

                         Componenti legacy

                         Linguaggi utilizzati

               Sono una foto della realtà, non di come
               vorremmo che fosse.

martedì 27 novembre 12
martedì 27 novembre 12
Users & Personas
               Possiamo aggiungere informazioni
               relative agli utenti, o alle loro famiglie
               Possiamo evidenziare le caratteristiche
               chiave delle personas e renderle parte
               del modello...
               ...specialmente se questo genera una
               conversazione interessante con gli
               esperti di dominio
martedì 27 novembre 12
martedì 27 novembre 12
Tests
               Durante la conversazione emergono
               dettagli che ha senso catturare in un
               test.
                         Scritto in linguaggio naturale

                         ...secondo gli schemi BDD (--> Cucumber)

               In una prospettiva ad eventi, la struttura
               Given [events] When [command] Then
               [event] è molto interessante :-)
martedì 27 novembre 12
martedì 27 novembre 12
Takeaways

               Siamo riusciti a modellare un sistema
               complesso ignorando i dati
                         ... e se il data model fosse parte del
                         problema?

               Abbiamo mantenuto il focus sul
               comportamento del sistema e non sulla
               struttura static

martedì 27 novembre 12
Takeaways

               Questo modello ha valore anche come
               strumento di apprendimento collettivo,
               e come visione di insieme (non è detto
               che gli esperti di dominio sappiano già
               tutto)
               Il tempo è tiranno, ma...
               Lo spazio è tiranno, ma...

martedì 27 novembre 12
martedì 27 novembre 12
Sistemi Legacy
               Il modello che abbiamo costruito è molto vicino ad
               un “modello ideale” del sistema
                         NON è il punto di partenza per rifare tutto!

                         Ma è un buon punto di riferimento per stabilire una
                         direzione

               Componenti legacy che non fanno parte del
               dominio, emergono come complessità accidentale.
                         Operazioni batch, foglietti che non sapete dove piazzare...

                         ...sono fuori posto come uno squatter alla prima della
                         Scala
martedì 27 novembre 12

More Related Content

More from Alberto Brandolini

Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)Alberto Brandolini
 
Software design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingSoftware design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingAlberto Brandolini
 
Reshaping enterrprise software
Reshaping enterrprise softwareReshaping enterrprise software
Reshaping enterrprise softwareAlberto Brandolini
 
Guerrilla portfolio management
Guerrilla portfolio managementGuerrilla portfolio management
Guerrilla portfolio managementAlberto Brandolini
 
Idea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw editionIdea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw editionAlberto Brandolini
 
Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014Alberto Brandolini
 
The final words about software estimation
The final words about software estimationThe final words about software estimation
The final words about software estimationAlberto Brandolini
 
Bullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talkBullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talkAlberto Brandolini
 

More from Alberto Brandolini (20)

Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)
 
Extreme DDD modelling
Extreme DDD modellingExtreme DDD modelling
Extreme DDD modelling
 
The gordian knot
The gordian knotThe gordian knot
The gordian knot
 
Software design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingSoftware design as a cooperative game with EventStorming
Software design as a cooperative game with EventStorming
 
La fatina dei denti
La fatina dei dentiLa fatina dei denti
La fatina dei denti
 
50.000 orange stickies later
50.000 orange stickies later50.000 orange stickies later
50.000 orange stickies later
 
The alignment
The alignmentThe alignment
The alignment
 
Chasing elephants
Chasing elephantsChasing elephants
Chasing elephants
 
Optimized for what
Optimized for whatOptimized for what
Optimized for what
 
Reshaping enterrprise software
Reshaping enterrprise softwareReshaping enterrprise software
Reshaping enterrprise software
 
Guerrilla portfolio management
Guerrilla portfolio managementGuerrilla portfolio management
Guerrilla portfolio management
 
Idea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw editionIdea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw edition
 
Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014
 
Managing debt remastered
Managing debt remasteredManaging debt remastered
Managing debt remastered
 
The sweet spot
The sweet spotThe sweet spot
The sweet spot
 
Liberate il kraken
Liberate il krakenLiberate il kraken
Liberate il kraken
 
The final words about software estimation
The final words about software estimationThe final words about software estimation
The final words about software estimation
 
Bullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talkBullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talk
 
It's not simple at all
It's not simple at allIt's not simple at all
It's not simple at all
 
Pissing against the wind
Pissing against the windPissing against the wind
Pissing against the wind
 

Event based modeling iad 2012

  • 2. Obiettivi Giungere ad un modello di un sistema complesso in tempi rapidi fare emergere i concetti fondamentali di Domain-Driven Design senza particolari prerequisiti. martedì 27 novembre 12
  • 4. In pratica... Srotoliamo un rotolone di carta sulla parete. Abbiamo a disposizione 25 metri lineari di spazio per modellare Lavoro collaborativo martedì 27 novembre 12
  • 5. Domain Events Apparente parentela con un Activity Diagram ...ma non stiamo facendo UML Gli eventi non possono essere messi in discussione. Sono avvenuti. Prendiamone atto. Visione d’insieme Tutti i team tendono a “partire per la tangente” immaginando un dominio, invece che chiedere all’esperto di dominio. Il sistema reale potrebbe risultare molto più semplice Il sistema reale potrebbe risultare molto più complesso martedì 27 novembre 12
  • 6. Dritta: ...la cosa è molto più interessante se esploriamo collaborativamente le aree che non conosciamo. ...con l’esperto di dominio. ... con esempi concreti. martedì 27 novembre 12
  • 8. origine degli eventi Gli eventi non nascono dal nulla: alcuno nascono in risposta ad azioni degli utenti altri nascono in sistemi esterni altri sono originati dallo scorrere del tempo ...altri sono generati in risposta ad altri eventi martedì 27 novembre 12
  • 11. Event Flow Ricerchiamo antefatti e conseguenze dei nostri eventi Il trucco del participio passato aiuta a chiarire la semantica: “matrimonio” non è un evento (ma non ditelo a vostra moglie/marito) Più attori entrano nel nostro sistema martedì 27 novembre 12
  • 13. Aggregates “Come definire correttamente gli aggregati?” questa è la questione che arrovella ogni DDD practitioner fate un giro su DDD-IT, se non ci credete L’obiettivo di questo esperimento è di arrivare ad una loro definizione per una strada diversa dal solito martedì 27 novembre 12
  • 14. Definizione Un’aggregato rappresenta una unità di consistenza: un gruppo di oggetti il cui stato cambia simultaneamente. ...ma così non è molto chiaro... ...quanto sono grandi questi oggetti? ...come sono fatti? Ha a che fare con i confini transazionali, ma non è detto che i nostri siano Ok. martedì 27 novembre 12
  • 15. Rule of thumb Per individuare cosa fa parte dell’aggregato possiamo pensare a Informazioni che vengono cancellate assieme Informazioni che vengono spostate assieme Informazioni che vengono distribuite assieme martedì 27 novembre 12
  • 16. Invarianti Dimentichiamo il dato: L’aggregato può accettare o rifiutare il comando. Sulla base di quali informazioni? Cosa è sempre garantito per il nostro aggregato? martedì 27 novembre 12
  • 18. Aggregati La prospettiva basata sulle invarianti aiuta a modellare correttamente gli aggregati Mi limito ad una dimensione che posso controllare Propago le variazioni con Domain Events Esploro correttamente il dominio Il sistema è eventualmente consistente martedì 27 novembre 12
  • 19. Esempio Limite massimo di partecipanti per classe: Da dove deriva? Limite logistico aula? --> accetto e tratto per una location più adatta Limite fisiologico corso --> stand-by e tratto per una nuova edizione Non impongo requisiti non presenti nel sistema martedì 27 novembre 12
  • 21. Subdomains Rappresentano la visione business del sistema Alcune porzioni sono fondamentali per la competitività della nostra azienda. Es contenuti su web, marketing, quello che ci fa vendere qualcosa in più. Altre sono semplicemente necessarie. Es. fatturazione: serve, ma non avremo nessun cliente un più per la bellezza ed il tempismo delle nostre fatture. martedì 27 novembre 12
  • 22. Linguaggi In aziende di medie dimensioni i referenti sono diversi. Hanno obiettivi diversi Parlano lingue diverse ...richiederanno modelli diversi Attenzione: non stiamo parlando (ancora) dei Bounded Contexts... martedì 27 novembre 12
  • 24. Bounded Contexts Evidenziano i diversi modelli in gioco Applicazioni software Componenti legacy Linguaggi utilizzati Sono una foto della realtà, non di come vorremmo che fosse. martedì 27 novembre 12
  • 26. Users & Personas Possiamo aggiungere informazioni relative agli utenti, o alle loro famiglie Possiamo evidenziare le caratteristiche chiave delle personas e renderle parte del modello... ...specialmente se questo genera una conversazione interessante con gli esperti di dominio martedì 27 novembre 12
  • 28. Tests Durante la conversazione emergono dettagli che ha senso catturare in un test. Scritto in linguaggio naturale ...secondo gli schemi BDD (--> Cucumber) In una prospettiva ad eventi, la struttura Given [events] When [command] Then [event] è molto interessante :-) martedì 27 novembre 12
  • 30. Takeaways Siamo riusciti a modellare un sistema complesso ignorando i dati ... e se il data model fosse parte del problema? Abbiamo mantenuto il focus sul comportamento del sistema e non sulla struttura static martedì 27 novembre 12
  • 31. Takeaways Questo modello ha valore anche come strumento di apprendimento collettivo, e come visione di insieme (non è detto che gli esperti di dominio sappiano già tutto) Il tempo è tiranno, ma... Lo spazio è tiranno, ma... martedì 27 novembre 12
  • 33. Sistemi Legacy Il modello che abbiamo costruito è molto vicino ad un “modello ideale” del sistema NON è il punto di partenza per rifare tutto! Ma è un buon punto di riferimento per stabilire una direzione Componenti legacy che non fanno parte del dominio, emergono come complessità accidentale. Operazioni batch, foglietti che non sapete dove piazzare... ...sono fuori posto come uno squatter alla prima della Scala martedì 27 novembre 12