Gestire la complessità
           con
  Domain Driven
         Design

          Alberto Brandolini
 alberto.brandolini@av...
About me
Nell’IT dai tempi dello ZX Spectrum
Generalmente in progetti di grandi dimensioni
NonSoloCodice
Trainer (Freelanc...
www.avanscoperta.it
avanscoperta.wordpress.com
alberto.brandolini@avanscoperta.i
t




                           © Albert...
Domain Driven
     Design
Il libro di Eric Evans è stato
pubblicato nel 2004, e l’interesse
è cresciuto di anno in anno.
A...
...direttamente dalla fonte:


 “Domain-driven design non è
  una tecnologia o una metodologia.
E’ un modo di pensare ed u...
Direttamente dalla fonte…
         part 2

“Se dovessi riscrivere il libro ora, sarebbe
       completamente diverso”




...
DDD - what it is and
  why it matters




                 © Alberto Brandolini 2009
DDD - what it is and
      why it matters
    E’ un insieme di tecniche di modellazione
collaudata particolarmente indiriz...
DDD - what it is and
      why it matters
     E’ un insieme di tecniche di modellazione
collaudata particolarmente indiri...
DDD - what it is and
        why it matters
        E’ un insieme di tecniche di modellazione
   collaudata particolarment...
DDD - what it is and
        why it matters
        E’ un insieme di tecniche di modellazione
   collaudata particolarment...
...Non bastava OOP?
La proposta iniziale di OOP è stata migliorata
in varie direzioni, principalmente indirizzando
questio...
La premessa

    Il centro dell’attenzione
dovrebbe essere sul dominio e
         sulla sua logica

Il la progettazione di...
L’ecosistema


  E’ necessario un processo di
sviluppo agile, che permetta di
raccogliere il feedback di utenti
e domain e...
Cos’hanno in comune queste
         persone?
Cos’hanno in comune queste
         persone?
Cos’hanno in comune queste
         persone?
Cos’hanno in comune queste
         persone?
Cos’hanno in comune queste
         persone?
Cos’hanno in comune queste
         persone?
Cos’hanno in comune queste
         persone?
Domain Expert




           © Alberto Brandolini 2009
Domain Expert



        Dominii complessi
necessariamente hanno un esperto.


                         © Alberto Brandoli...
Domain Expert



        Dominii complessi
necessariamente hanno un esperto.
  Non sempre si presenta in “forma
          ...
E’ necessario un processo di
sviluppo agile, che permetta di
raccogliere il feedback di utenti
Il domainobiettivo in stabi...
Product Backlog
Feature A               Feature B




Feature C               Feature D




Feature E
                    ...
Product Backlog
Feature A               Feature B

        Do ne                          ne
                             ...
Product Backlog
Feature A                Feature B

               ne                    Do ne
            Do
Feature C   ...
Product Backlog
Feature A                Feature B

            Do ne                    Do ne
Feature C                Fe...
Product Backlog
Feature A                Feature B

            Do ne                       ne
                           ...
Product Backlog
Feature A                Feature B

               ne                    Do ne
            Do
Feature C   ...
Knowledge Crunching

   La collaborazione creativa passa
   necessariamente un processo di
 apprendimento della complessit...
E’ necessario un processo di
sviluppo agile, che permetta di
raccogliere il feedback di utenti
e L’apprendimentoin iterazi...
The right to be
    wrong


             © Alberto Brandolini 2009
Vedere la luce
             © Alberto Brandolini 2009
Il Modello
© Alberto Brandolini 2009
© Alberto Brandolini 2009
© Alberto Brandolini 2009
A cosa serve un
        modello?
Un modello è una rappresentazione
 del dominio, con uno scopo ben
              preciso.
...
Esprimere il modello
             Il modello ed il design devono
                 evolvere simultameamente.
Model         ...
© Alberto Brandolini 2009
Cosa stiamo
comunicando?


           © Alberto Brandolini 2009
Lo-fi UML




           © Alberto Brandolini 2009
Lo-fi UML
 Molti strumenti hanno male interpretato il ruolo di
UML, concentrandosi sulle funzionalità di code-generation,
 ...
Lo-fi UML
 Molti strumenti hanno male interpretato il ruolo di
UML, concentrandosi sulle funzionalità di code-generation,
 ...
Lo-fi UML
 Molti strumenti hanno male interpretato il ruolo di
UML, concentrandosi sulle funzionalità di code-generation,
 ...
Lo-fi UML
 Molti strumenti hanno male interpretato il ruolo di
UML, concentrandosi sulle funzionalità di code-generation,
 ...
Lo-fi UML
 Molti strumenti hanno male interpretato il ruolo di
UML, concentrandosi sulle funzionalità di code-generation,
 ...
Lo-fi UML
 Molti strumenti hanno male interpretato il ruolo di
UML, concentrandosi sulle funzionalità di code-generation,
 ...
Analyst

Domain
Expert                       Developer      Developer




                  Ubiquitous
                  L...
Implementiamo il
    modello:

DDD Building
  Blocks
Architettura

Il contesto di riferimento è dato dal
    Domain Model Pattern

 “An object model of the domain that
incorpo...
Presentation
   Layer




 Application
   Layer



                  Qui è dove
Domain Layer      succedono le
           ...
Costruiamo il
 nostro modello
  Indipendentemente dalla
 complessità del dominio, il
 domain model può essere
rappresentat...
Building blocks
 In DDD, ogni dominio espone una struttura specifica
     ma con alcuni tratti comuni. Può quindi essere
or...
Entities
                                <<Entity>>

Oggetti con un identità                   Ordine
ed uno stato.       ...
Value Objects
                                              <<Value Object>>
                                             ...
Services
Rappresenta un’operazione
peculiare del domain model.     <<Service>>
                                           ...
Aggregates
Un raggruppamento di                   <<Entity>> <<Root>>      <<Value Object>>

oggetti associati che trattia...
Factories
La creazione di
un’istanza di un oggetto
complesso non è di         <<Factory>>
pertinenza dell’oggetto.        ...
Repositories
Gestiscono le funzionalità di
gestione della persistenza,     <<Repository>>
fornendo l’illusione di una     ...
Aggregate Object
A volte la responsabilità        <<Aggregate Root Object>>
dell’integrità dell’intero
aggregato è “troppo...
Domain Event
A volte la nostra applicazione tiene
traccia di cose che succedono.
                                       <<...
Altri mattoncini...

           Specifications
  Intention Revealing interfaces
         Fluent Interfaces
     Side effect...
Mettendo tutto assieme...

    Aggregate              Repository                    Factory

         usa                 ...
Mettendo tutto assieme...
  Presi uno ad uno questi pattern non sono
               una rivoluzione.
     Sono stati selez...
Aggregate                   Repository                      Factory                             Aggregate              Rep...
...quanto scalabile?
Complessità
Domain Complexity


                    © Alberto Brandolini 2009
Domain Complexity


                    © Alberto Brandolini 2009
Domain Complexity


                    © Alberto Brandolini 2009
Evolution Cost




                 Domain Complexity


                                     © Alberto Brandolini 2009
Evolution Cost




                 Domain Complexity


                                     © Alberto Brandolini 2009
A l c re s
            c e re de
de l d o m               l la c o m
            i n io, i p             ple s s i t
tradi...
Evolution Cost




                 Domain Complexity


                                     © Alberto Brandolini 2009
Evolution Cost




                 Domain Complexity


                                     © Alberto Brandolini 2009
Evolution Cost

            “ Ta cti c
                         a l DDD ”
           s c a la b                 è
        ...
Evolution Cost




                 Domain Complexity


                                     © Alberto Brandolini 2009
Domain Complexity




            © Alberto Brandolini 2009
Domain Complexity




            © Alberto Brandolini 2009
Domain Complexity
Pr
     o je
            ct
                 Siz
                       e(
                            L...
Domain Complexity
Pr
     o je
            ct
                 Siz
                       e(
                            L...
e)
                 (t i m
             i ze
        ts
     je c
Pro
             Domain Complexity
Pr
     o je
        ...
e)
                 (t i m
             i ze
        ts
     je c
Pro
             Domain Complexity
Pr
     o je
        ...
e)
Ex




                                        (t i m
     te
      rn
         al




                                ...
e)
Ex




                                        (t i m
     te
      rn
         al




                                ...
e)
Ex




                                        (t i m
     te
      rn
         al




                                ...
e)
Ex




                                        (t i m
     te
      rn
         al




                                ...
e)
      Ex




                                              (t i m
           te
            rn
               al




  ...
© Alberto Brandolini 2009
Il successo è uno dei
fattori di incremento della
        complessità


                    © Alberto Brandolini 2009
Il successo è uno dei
fattori di incremento della
        complessità


                    © Alberto Brandolini 2009
Il successo è uno dei
fattori di incremento della
        complessità


                    © Alberto Brandolini 2009
L’illusione del foglio
           bianco



        ...Siamo nel 2010
...seriamente pensiamo che il
nostro cliente non abb...
Bounded Context

           L’integrità di un modello
          può essere garantita solo
                 “entro certi li...
Contesto

“il luogo che determina il
significato di un termine che vi
compare”
Termine e significato




                © Alberto Brandolini 2009
Termine e significato
Cappuccino




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino


Cappuccino




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino


Cappuccino




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino


Cappuccino        ?




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino


Cappuccino        ?




                  © Alberto Brandolini 2009
Termine e significato
Cappuccino


Cappuccino        ?

Cappuccino



                  © Alberto Brandolini 2009
Termine e significato
Cappuccino


Cappuccino        ?

Cappuccino



                  © Alberto Brandolini 2009
Termine e significato
Cappuccino


Cappuccino        ?

Cappuccino                        ?

                  © Alberto Br...
Termine e significato
Cappuccino


Cappuccino        ?

Cappuccino                        ?

                  © Alberto Br...
Termine e significato
Cappuccino


Cappuccino        ?

Cappuccino                        ?

Cappuccino
                  ©...
Termine e significato
Cappuccino


Cappuccino         ?

Cappuccino                         ?

Cappuccino
               ? ...
Interludio:
Breve storia di una lingua
  (liberamente interpretata)
                        © Alberto Brandolini 2009
Il modello originale è il
risultato di diverse influenze
                      © Alberto Brandolini 2009
Una reference
 implementation ha
permesso di stabilire
   uno standard  © Alberto Brandolini 2009
L’adozione su larga
scala ha introdotto
  delle variazioni
                 © Alberto Brandolini 2009
Un
sottoinsieme
del modello è
diventato una
lingua franca
permettendo
interoperabilità
fra sistemi
differenti
            ...
Nonostante gli sforzi per
       produrre una
documentazione estensiva
l’evoluzione non si arresta
                       ...
Alcuni non
aderiscono
agli
standard




             © Alberto Brandolini 2009
Alcuni non
aderiscono
agli
standard




             © Alberto Brandolini 2009
Alcuni non   ... e forse
aderiscono       non lo
agli            faranno
standard             mai




               © Alb...
Nuovi requisiti e/o canali di
   comunicazione possono introdurre
cambiamenti anche in contesti consolidati
              ...
Multiple models
                                   Web Application Context
Banking Context


                             ...
Multiple models

Applicazioni non banali hanno sempre a
       che fare con più modelli

  Applicazioni complesse svolgono...
Team A                                                  Team B
Organization Level




                                    ...
Relazioni fra contesti
la complessità si annida nel modo in cui
differenti contesti sono in relazione tra
                ...
Relazioni fra contesti
     la complessità si annida nel modo in cui
     differenti contesti sono in relazione tra
      ...
Upstream-Downstream




                   u   Context B
   Context A
               d



                              © ...
Il software rispecchia le
     organizzazioni
Strategic DDD Patterns
   Anti Corruption Layer
        Conformist
     Customer Supplier
        Partnership
         Ope...
Tactical DDD             Strategic DDD

Patterns da applicare al
                         Pattern da riconoscere
    desig...
Our context map
      Big Ba l l
       of Mu d
Context                    Context F
   C                                 ...
© Alberto Brandolini 2009
Strategic Domain
  Driven Design
“Le battaglie sono
vinte prima di essere
combattute”
            Sun Tzu
“Le battaglie sono
vinte prima di essere
combattute”
            Sun Tzu


“La tattica senza
strategia è solo
rumore prima...
Modello a risorse finite
             Progetti complessi
             richiedono una corretta
             valutazione dell...
Un gioco di strategia?




                 © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Un gioco di strategia?
• Money
• Brain
• Time
• Developers
• Skills         © Alberto Brandolini 2009
Le dimensioni
           contano
Dominii di grandi dimensioni o particolarmente
complessi non possono essere gestiti allo
...
Molte organizzazioni
  ipotizzano un modello
ottimistico di condivisione
Molte organizzazioni
  ipotizzano un modello
ottimistico di condivisione
Ma la realtà è decisamente
          diversa
Quanto costa
  mettersi
 d’accordo?
...per non parlare della
 gestione delle risorse
         umane
Ma noi sappiamo che le
   risorse non sono
Ma noi sappiamo che le
   risorse non sono
La cosa giusta
Cosa ci rende speciali?
Cosa significa vincere?
Benefici e costi



             © Alberto Brandolini 2009
Come scegliere?

  Allochiamo le nostre risorse laddove
  possano apportare i maggiori benefici

Non investiamo oltre il ne...
… serve una Mappa




              © Alberto Brandolini 2009
Un bagno di realtà

Non tutte la parti di un’applicazione non
 banale saranno progettate ugualmente
                  bene...
Core Domain



Specifico del nostro dominio applicativo.

Il nucleo centrale dell’applicazione, le cui
funzionalità ci assi...
Supporting Subdomain

 legato al dominio applicativo, ma non in
grado di garantire un vantaggio in termini
             di...
Generic Subdomain

Non particolarmente legato al dominio
applicativo, necessario al funzionamento
     complessivo dell’ap...
Priorità

 Le priorità provengono dal contesto
               business

          ...e cambieranno…

   Per produrre softw...
References
Domain Driven Design
Eric Evans
http://domaindrivendesign.org
http://tech.groups.yahoo.com/group/
domaindrivend...
References
Apply Domain Driven
Design and Patterns
Jimmy Nilsson
Addison Wesley




                             © Alberto...
Domain Driven Design
  discussion groups

• http://tech.groups.yahoo.com/group/
  domaindrivendesign/
• http://it.groups.y...
Questions?



             © Alberto Brandolini 2009
Gestire La Complessità Con Domain Driven Design
Upcoming SlideShare
Loading in …5
×

Gestire La Complessità Con Domain Driven Design

3,577 views

Published on

La presentazione su Domain Driven Design alla V UgiAlt.Net Conference: Milano 23 Gennaio 2010

Published in: Technology, Business
  • Be the first to comment

Gestire La Complessità Con Domain Driven Design

  1. 1. Gestire la complessità con Domain Driven Design Alberto Brandolini alberto.brandolini@avanscoperta.it
  2. 2. About me Nell’IT dai tempi dello ZX Spectrum Generalmente in progetti di grandi dimensioni NonSoloCodice Trainer (Freelance & Skills Matter) Technical Writer Blogger: http://ziobrando.blogspot.com Twitter: ziobrando My e-mail: alberto.brandolini@gmail.com © Alberto Brandolini 2009
  3. 3. www.avanscoperta.it avanscoperta.wordpress.com alberto.brandolini@avanscoperta.i t © Alberto Brandolini 2009
  4. 4. Domain Driven Design Il libro di Eric Evans è stato pubblicato nel 2004, e l’interesse è cresciuto di anno in anno. Applicata su progetti: complex enterprise software government performance crytical systems © Alberto Brandolini 2009
  5. 5. ...direttamente dalla fonte: “Domain-driven design non è una tecnologia o una metodologia. E’ un modo di pensare ed un insieme di priorità volte ad accelerare progetti software in dominii complessi.” © Alberto Brandolini 2009
  6. 6. Direttamente dalla fonte… part 2 “Se dovessi riscrivere il libro ora, sarebbe completamente diverso” © Alberto Brandolini 2009
  7. 7. DDD - what it is and why it matters © Alberto Brandolini 2009
  8. 8. DDD - what it is and why it matters E’ un insieme di tecniche di modellazione collaudata particolarmente indirizzate ad applicazioni complesse. © Alberto Brandolini 2009
  9. 9. DDD - what it is and why it matters E’ un insieme di tecniche di modellazione collaudata particolarmente indirizzate ad applicazioni complesse. E’ un insieme di principi e pratiche a supporto del processo di sviluppo. © Alberto Brandolini 2009
  10. 10. DDD - what it is and why it matters E’ un insieme di tecniche di modellazione collaudata particolarmente indirizzate ad applicazioni complesse. E’ un insieme di principi e pratiche a supporto del processo di sviluppo. E’ un insieme di pattern che supportano una visione pulita e coerente del modello del dominio. © Alberto Brandolini 2009
  11. 11. DDD - what it is and why it matters E’ un insieme di tecniche di modellazione collaudata particolarmente indirizzate ad applicazioni complesse. E’ un insieme di principi e pratiche a supporto del processo di sviluppo. E’ un insieme di pattern che supportano una visione pulita e coerente del modello del dominio. È un insieme di strategie pragmatiche che permettono alle applicazioni di scalare in termini di dimensioni e complessità senza compromettere la loro integrità. © Alberto Brandolini 2009
  12. 12. ...Non bastava OOP? La proposta iniziale di OOP è stata migliorata in varie direzioni, principalmente indirizzando questioni architetturali e di design. Tuttavia, spesso OOP non è una garanzia di successo, e non è accompagnata da discipline consolidate per modellare dominii complessi. In passato, tool e frameworks hanno “piegato” il paradigma OO introducendo vincoli alla modellazione del dominio. © Alberto Brandolini 2009
  13. 13. La premessa Il centro dell’attenzione dovrebbe essere sul dominio e sulla sua logica Il la progettazione di un dominio complesso dovrebbe essere basata su un modello © Alberto Brandolini 2009
  14. 14. L’ecosistema E’ necessario un processo di sviluppo agile, che permetta di raccogliere il feedback di utenti e domain experts, in iterazioni brevi. © Alberto Brandolini 2009
  15. 15. Cos’hanno in comune queste persone?
  16. 16. Cos’hanno in comune queste persone?
  17. 17. Cos’hanno in comune queste persone?
  18. 18. Cos’hanno in comune queste persone?
  19. 19. Cos’hanno in comune queste persone?
  20. 20. Cos’hanno in comune queste persone?
  21. 21. Cos’hanno in comune queste persone?
  22. 22. Domain Expert © Alberto Brandolini 2009
  23. 23. Domain Expert Dominii complessi necessariamente hanno un esperto. © Alberto Brandolini 2009
  24. 24. Domain Expert Dominii complessi necessariamente hanno un esperto. Non sempre si presenta in “forma canonica” © Alberto Brandolini 2009
  25. 25. E’ necessario un processo di sviluppo agile, che permetta di raccogliere il feedback di utenti Il domainobiettivo in stabilire e nostro experts, è iterazioni una collaborazione creativa brevi. © Alberto Brandolini 2009
  26. 26. Product Backlog Feature A Feature B Feature C Feature D Feature E Feature F Feature G Feature H Feature I Feature J © Alberto Brandolini 2009
  27. 27. Product Backlog Feature A Feature B Do ne ne Do Feature C Feature D Do ne Implemented Features Feature E Feature F Feature G C B Feature H Feature I A Time Feature J Iteration 1 © Alberto Brandolini 2009
  28. 28. Product Backlog Feature A Feature B ne Do ne Do Feature C Feature D D o ne ne Do Implemented Feature E Features Do ne Feature F Do ne Feature G C F B E Feature H Feature I A D Time Feature J Iteration 1 Iteration 2 © Alberto Brandolini 2009
  29. 29. Product Backlog Feature A Feature B Do ne Do ne Feature C Feature D o ne D o ne D Implemented Feature E Features ne Feature F Do D o ne Feature G C F Do ne B E H Feature H Feature I ne A D G D o Time Feature J Iteration 1 Iteration 2 Iteration 3 © Alberto Brandolini 2009
  30. 30. Product Backlog Feature A Feature B Do ne ne Do Feature C Feature D Do ne D o ne Implemented Feature E Features Do ne Feature F Do ne Feature G C F Do ne B E H J Feature H Feature I Do ne o ne A D G I D Time Feature J Iteration 1 Iteration 2 Iteration 3 Iteration 4 ... Do ne © Alberto Brandolini 2009
  31. 31. Product Backlog Feature A Feature B ne Do ne Do Feature C Feature D Do ne ne Do Implemented Feature E Features o ne Feature F D ne Do Feature G Do ne C F B E H J O q ue r a s a Feature H Feature I ne s t a pp i D o ne Do A è s amo b aD ch gli e at a G I Time ! Feature J Iteration 1 Iteration 2 Iteration 3 Iteration 4 ... Do ne © Alberto Brandolini 2009
  32. 32. Knowledge Crunching La collaborazione creativa passa necessariamente un processo di apprendimento della complessità del dominio. Siamo interessati, al cosa, al come ed anche al perchè … siamo pagati per imparare © Alberto Brandolini 2009
  33. 33. E’ necessario un processo di sviluppo agile, che permetta di raccogliere il feedback di utenti e L’apprendimentoin iterazioni domain experts, non è un processo lineare brevi. © Alberto Brandolini 2009
  34. 34. The right to be wrong © Alberto Brandolini 2009
  35. 35. Vedere la luce © Alberto Brandolini 2009
  36. 36. Il Modello
  37. 37. © Alberto Brandolini 2009
  38. 38. © Alberto Brandolini 2009
  39. 39. © Alberto Brandolini 2009
  40. 40. A cosa serve un modello? Un modello è una rappresentazione del dominio, con uno scopo ben preciso. Non esiste il modello perfetto. Un buon modello è tagliato sull’uso che ne dobbiamo fare. © Alberto Brandolini 2009
  41. 41. Esprimere il modello Il modello ed il design devono evolvere simultameamente. Model Il codice è la forma di espressione definitiva del modello. Design Manufatti intermedi, diagrammi e documentazione servono per obiettivi intermedi. © Alberto Brandolini 2009
  42. 42. © Alberto Brandolini 2009
  43. 43. Cosa stiamo comunicando? © Alberto Brandolini 2009
  44. 44. Lo-fi UML © Alberto Brandolini 2009
  45. 45. Lo-fi UML Molti strumenti hanno male interpretato il ruolo di UML, concentrandosi sulle funzionalità di code-generation, reverse engineering, gradazioni di colore, ombre, etc... © Alberto Brandolini 2009
  46. 46. Lo-fi UML Molti strumenti hanno male interpretato il ruolo di UML, concentrandosi sulle funzionalità di code-generation, reverse engineering, gradazioni di colore, ombre, etc... ma © Alberto Brandolini 2009
  47. 47. Lo-fi UML Molti strumenti hanno male interpretato il ruolo di UML, concentrandosi sulle funzionalità di code-generation, reverse engineering, gradazioni di colore, ombre, etc... ma Il design è un’attività troppo cruciale per essere condotta in isolamento. © Alberto Brandolini 2009
  48. 48. Lo-fi UML Molti strumenti hanno male interpretato il ruolo di UML, concentrandosi sulle funzionalità di code-generation, reverse engineering, gradazioni di colore, ombre, etc... ma Il design è un’attività troppo cruciale per essere condotta in isolamento. L’uso di dosi eccessive di UML può impedire agli esperti di dominio di contribuire al modello. © Alberto Brandolini 2009
  49. 49. Lo-fi UML Molti strumenti hanno male interpretato il ruolo di UML, concentrandosi sulle funzionalità di code-generation, reverse engineering, gradazioni di colore, ombre, etc... ma Il design è un’attività troppo cruciale per essere condotta in isolamento. L’uso di dosi eccessive di UML può impedire agli esperti di dominio di contribuire al modello. © Alberto Brandolini 2009
  50. 50. Lo-fi UML Molti strumenti hanno male interpretato il ruolo di UML, concentrandosi sulle funzionalità di code-generation, reverse engineering, gradazioni di colore, ombre, etc... ma Il design è un’attività troppo cruciale per essere condotta in isolamento. L’uso di dosi eccessive di UML può impedire agli esperti di dominio di contribuire al modello. Limitiamoci ad un sottoinsieme di UML sufficiente a comunicare con gli esperti di dominio. © Alberto Brandolini 2009
  51. 51. Analyst Domain Expert Developer Developer Ubiquitous Language Whiteboard discussions Application Code Specs and Test Code documentation © Alberto Brandolini 2009
  52. 52. Implementiamo il modello: DDD Building Blocks
  53. 53. Architettura Il contesto di riferimento è dato dal Domain Model Pattern “An object model of the domain that incorporates both behavior and data.” Martin Fowler © Alberto Brandolini 2009
  54. 54. Presentation Layer Application Layer Qui è dove Domain Layer succedono le cose interessanti Infrastructure Layer © Alberto Brandolini 2009
  55. 55. Costruiamo il nostro modello Indipendentemente dalla complessità del dominio, il domain model può essere rappresentato con classi, con ruoli e responsabilità. © Alberto Brandolini 2009
  56. 56. Building blocks In DDD, ogni dominio espone una struttura specifica ma con alcuni tratti comuni. Può quindi essere organizzato in famiglie di classi con scopi ben precisi. Entities Value Objects Services Modules Aggregates Factories Repositories Aggregate Objects Domain Events © Alberto Brandolini 2009
  57. 57. Entities <<Entity>> Oggetti con un identità Ordine ed uno stato. data cliente Generalmente con una importo controparte su memoria ... persistente. aggiorna(...) Il loro stato evolve, durante chiudi() la vita dell’applicazione. calcolaImporto() ... © Alberto Brandolini 2009
  58. 58. Value Objects <<Value Object>> VoceOrdine merce Privi del concetto di quantità identità note calcolaImporto() Possono essere <<Value Object>> ... immutabili Money valuta Possono essere importo condivisi tra più entità plus(Money other) minus(Money other) ... © Alberto Brandolini 2009
  59. 59. Services Rappresenta un’operazione peculiare del domain model. <<Service>> DiscountCalculator Interfaccia definita in ... termini di altri elementi del calcolaScontoApplicabile(Ordine ordine) ... Domain Model L’operazione è stateless Servizi specifici del Dominio appartengono al Domain Layer © Alberto Brandolini 2009
  60. 60. Aggregates Un raggruppamento di <<Entity>> <<Root>> <<Value Object>> oggetti associati che trattiamo data Ordine VoceOrdine come un’unità di modifica del cliente importo merce quantità note dato. ... aggiorna(...) calcolaImporto() I confini dell’aggregato chiudi() calcolaImporto() ... coincidono con quelli delle ... <<Value Object>> transazione. <<Value Object>> Money Sconto valuta valuta importo importo Un’entità svolge il ruolo di calcolaImporto() plus(Money other) minus(Money other) radice dell’aggregato garantendo annota()... ... l’integrità delle Entity e dei Value Object all’interno dell’aggregato. © Alberto Brandolini 2009
  61. 61. Factories La creazione di un’istanza di un oggetto complesso non è di <<Factory>> pertinenza dell’oggetto. OrdineFactory ... La gestione della complessità legata alla creaOrdine(...) rigeneraOrdine(...) creazione delle istanze è delegata ad oggetti specifici © Alberto Brandolini 2009
  62. 62. Repositories Gestiscono le funzionalità di gestione della persistenza, <<Repository>> fornendo l’illusione di una OrdineRepository collezione in memoria. ... trovaOrdiniPendenti(...) Astraggono l’interazione trovaOrdiniEvasi(...) con lo strato di persistenza ... sottostante, offrendo servizi in termini di elementi del domain model. © Alberto Brandolini 2009
  63. 63. Aggregate Object A volte la responsabilità <<Aggregate Root Object>> dell’integrità dell’intero aggregato è “troppo” per OrdineAggregate l’entità alla radice: può essere ordine necessario un ruolo specifico. ... Un Aggregate Object checkIntegrity(...) coordina il controllo delle reStockOrder() invarianti e la gestione dello ... stato fra le differenti entità dell’aggregato. © Alberto Brandolini 2009
  64. 64. Domain Event A volte la nostra applicazione tiene traccia di cose che succedono. <<Domain Event>> Simili ai Value Object ma ConsegnaMerce intrinsecamente unici. dove Indipendenti dai confini quando chi transazionali. ... i Domain Event rappresentano eventi che sono significativi all’interno del nostro dominio. © Alberto Brandolini 2009
  65. 65. Altri mattoncini... Specifications Intention Revealing interfaces Fluent Interfaces Side effect free functions Command Query Separation Closure of Operations ... © Alberto Brandolini 2009
  66. 66. Mettendo tutto assieme... Aggregate Repository Factory usa salva crea Specification verifica Entity Value Object Value Object Value Object © Alberto Brandolini 2009
  67. 67. Mettendo tutto assieme... Presi uno ad uno questi pattern non sono una rivoluzione. Sono stati selezionati fra progetti di successo, non inventati. Nel loro insieme forniscono un approccio scalabile per gestire dominii complessi. Producono un design duttile in grado di reagire al cambiamento ed alle evoluzioni © Alberto Brandolini 2009
  68. 68. Aggregate Repository Factory Aggregate Repository Factory usa Service usa salva crea usa crea salva Specification verifica Entity Specification verifica Entity Entity Value Object Value Object Value Object Value Object usa Value Object Value Object Service Repository usa Value Object Domain salva Repository Event salva Entity Entity Entity usa Value Object Value Object usa Value Object Value Object Specification © Alberto Brandolini 2009
  69. 69. ...quanto scalabile?
  70. 70. Complessità
  71. 71. Domain Complexity © Alberto Brandolini 2009
  72. 72. Domain Complexity © Alberto Brandolini 2009
  73. 73. Domain Complexity © Alberto Brandolini 2009
  74. 74. Evolution Cost Domain Complexity © Alberto Brandolini 2009
  75. 75. Evolution Cost Domain Complexity © Alberto Brandolini 2009
  76. 76. A l c re s c e re de de l d o m l la c o m i n io, i p ple s s i t tradiz a radi g à io n a l i “ mi s of f ro n o” Evolution Cost Domain Complexity © Alberto Brandolini 2009
  77. 77. Evolution Cost Domain Complexity © Alberto Brandolini 2009
  78. 78. Evolution Cost Domain Complexity © Alberto Brandolini 2009
  79. 79. Evolution Cost “ Ta cti c a l DDD ” s c a la b è i l e r i sp c o mp le etto a l s s i tà d la el Do m i n io Domain Complexity © Alberto Brandolini 2009
  80. 80. Evolution Cost Domain Complexity © Alberto Brandolini 2009
  81. 81. Domain Complexity © Alberto Brandolini 2009
  82. 82. Domain Complexity © Alberto Brandolini 2009
  83. 83. Domain Complexity Pr o je ct Siz e( LO C) © Alberto Brandolini 2009
  84. 84. Domain Complexity Pr o je ct Siz e( LO C) © Alberto Brandolini 2009
  85. 85. e) (t i m i ze ts je c Pro Domain Complexity Pr o je ct Siz e( LO C) © Alberto Brandolini 2009
  86. 86. e) (t i m i ze ts je c Pro Domain Complexity Pr o je ct Siz e( LO C) © Alberto Brandolini 2009
  87. 87. e) Ex (t i m te rn al i ze Sy o st r L ts em e g je c s ac y Pro Domain Complexity Pr o je ct Siz e( LO C) © Alberto Brandolini 2009
  88. 88. e) Ex (t i m te rn al i ze Sy o st r L ts em e g je c s ac y Pro Domain Complexity Pr o je ct Siz e( LO C) © Alberto Brandolini 2009
  89. 89. e) Ex (t i m te rn al i ze Sy o st r L ts em e g je c s ac y Pro Domain Complexity Pr e Siz o je ct m Siz Te a e( LO C) © Alberto Brandolini 2009
  90. 90. e) Ex (t i m te rn al i ze Sy o st r L ts em e g je c s ac y Pro Domain Complexity Pr e Siz o je ct m Siz Te a e( LO C) © Alberto Brandolini 2009
  91. 91. e) Ex (t i m te rn al i ze Sy o st r L ts em e g je c s ac y Pro t io n iza y Domain Complexity g an e x i t Or pl C om Pr e Siz o je ct m Siz Te a e( LO C) © Alberto Brandolini 2009
  92. 92. © Alberto Brandolini 2009
  93. 93. Il successo è uno dei fattori di incremento della complessità © Alberto Brandolini 2009
  94. 94. Il successo è uno dei fattori di incremento della complessità © Alberto Brandolini 2009
  95. 95. Il successo è uno dei fattori di incremento della complessità © Alberto Brandolini 2009
  96. 96. L’illusione del foglio bianco ...Siamo nel 2010 ...seriamente pensiamo che il nostro cliente non abbia mai usato i computer? © Alberto Brandolini 2009
  97. 97. Bounded Context L’integrità di un modello può essere garantita solo “entro certi limiti” Bounded Context Un bounded context rappresenta la massima estensione di un modello di cui possiamo garantire l’integrità © Alberto Brandolini 2009
  98. 98. Contesto “il luogo che determina il significato di un termine che vi compare”
  99. 99. Termine e significato © Alberto Brandolini 2009
  100. 100. Termine e significato Cappuccino © Alberto Brandolini 2009
  101. 101. Termine e significato Cappuccino © Alberto Brandolini 2009
  102. 102. Termine e significato Cappuccino © Alberto Brandolini 2009
  103. 103. Termine e significato Cappuccino © Alberto Brandolini 2009
  104. 104. Termine e significato Cappuccino Cappuccino © Alberto Brandolini 2009
  105. 105. Termine e significato Cappuccino Cappuccino © Alberto Brandolini 2009
  106. 106. Termine e significato Cappuccino Cappuccino ? © Alberto Brandolini 2009
  107. 107. Termine e significato Cappuccino Cappuccino ? © Alberto Brandolini 2009
  108. 108. Termine e significato Cappuccino Cappuccino ? Cappuccino © Alberto Brandolini 2009
  109. 109. Termine e significato Cappuccino Cappuccino ? Cappuccino © Alberto Brandolini 2009
  110. 110. Termine e significato Cappuccino Cappuccino ? Cappuccino ? © Alberto Brandolini 2009
  111. 111. Termine e significato Cappuccino Cappuccino ? Cappuccino ? © Alberto Brandolini 2009
  112. 112. Termine e significato Cappuccino Cappuccino ? Cappuccino ? Cappuccino © Alberto Brandolini 2009
  113. 113. Termine e significato Cappuccino Cappuccino ? Cappuccino ? Cappuccino ? © Alberto Brandolini 2009
  114. 114. Interludio: Breve storia di una lingua (liberamente interpretata) © Alberto Brandolini 2009
  115. 115. Il modello originale è il risultato di diverse influenze © Alberto Brandolini 2009
  116. 116. Una reference implementation ha permesso di stabilire uno standard © Alberto Brandolini 2009
  117. 117. L’adozione su larga scala ha introdotto delle variazioni © Alberto Brandolini 2009
  118. 118. Un sottoinsieme del modello è diventato una lingua franca permettendo interoperabilità fra sistemi differenti © Alberto Brandolini 2009
  119. 119. Nonostante gli sforzi per produrre una documentazione estensiva l’evoluzione non si arresta © Alberto Brandolini 2009
  120. 120. Alcuni non aderiscono agli standard © Alberto Brandolini 2009
  121. 121. Alcuni non aderiscono agli standard © Alberto Brandolini 2009
  122. 122. Alcuni non ... e forse aderiscono non lo agli faranno standard mai © Alberto Brandolini 2009
  123. 123. Nuovi requisiti e/o canali di comunicazione possono introdurre cambiamenti anche in contesti consolidati © Alberto Brandolini 2009
  124. 124. Multiple models Web Application Context Banking Context Account Account La consapevolezza della presenza di più modelli, può aiutarci ad avere una visione d’insieme più nitida Copyright Alberto Brandolini
  125. 125. Multiple models Applicazioni non banali hanno sempre a che fare con più modelli Applicazioni complesse svolgono in genere più di un compito dominii complessi possono essere territorio di diversi esperti di dominio © Alberto Brandolini 2009
  126. 126. Team A Team B Organization Level e r on t One h e e re n p r i m te am e ot ff a r i l wo r e t h a di y k c l a s o n s om s hi l s o n rt io n se s e . . .w o r k p o w A' Context Level A ...c be onc c om e p slo e s e t ua l wl xp int y s en eg li p si v r i t sa ea y wa n d y Copyright Alberto Brandolini
  127. 127. Relazioni fra contesti la complessità si annida nel modo in cui differenti contesti sono in relazione tra loro Context Context © Alberto Brandolini 2009
  128. 128. Relazioni fra contesti la complessità si annida nel modo in cui differenti contesti sono in relazione tra loro Con xt © Alberto Brandolini 2009
  129. 129. Upstream-Downstream u Context B Context A d © Alberto Brandolini 2009
  130. 130. Il software rispecchia le organizzazioni
  131. 131. Strategic DDD Patterns Anti Corruption Layer Conformist Customer Supplier Partnership Open Host Published Language Continuous Integration Separate Ways Shared Kernel Big Ball Of Mud © Alberto Brandolini 2009
  132. 132. Tactical DDD Strategic DDD Patterns da applicare al Pattern da riconoscere design della nostra nello scenario di progetto applicazione applicabili in un riconoscibili in ogni ecosistema ben ecosistema definito Design duttile ...Context Map? Copyright Alberto Brandolini
  133. 133. Our context map Big Ba l l of Mu d Context Context F C ! u Context A AC d pe n L d O Hos t Context u B Context Context E D
  134. 134. © Alberto Brandolini 2009
  135. 135. Strategic Domain Driven Design
  136. 136. “Le battaglie sono vinte prima di essere combattute” Sun Tzu
  137. 137. “Le battaglie sono vinte prima di essere combattute” Sun Tzu “La tattica senza strategia è solo rumore prima della sconfitta” Sun Tzu
  138. 138. Modello a risorse finite Progetti complessi richiedono una corretta valutazione dello scenario in cui operiamo. Le risorse disponibili per un progetto non sono infinite
  139. 139. Un gioco di strategia? © Alberto Brandolini 2009
  140. 140. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  141. 141. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  142. 142. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  143. 143. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  144. 144. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  145. 145. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  146. 146. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  147. 147. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  148. 148. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  149. 149. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  150. 150. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  151. 151. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  152. 152. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  153. 153. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  154. 154. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  155. 155. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  156. 156. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  157. 157. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  158. 158. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  159. 159. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  160. 160. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  161. 161. Un gioco di strategia? • Money • Brain • Time • Developers • Skills © Alberto Brandolini 2009
  162. 162. Le dimensioni contano Dominii di grandi dimensioni o particolarmente complessi non possono essere gestiti allo stesso modo: - più scopi non sempre convergenti - la comunicazione è meno efficiente al crescere della dimensione del team - gli sforzi per mantenere una visione coerente possono risultare superiori ai benefici © Alberto Brandolini 2009
  163. 163. Molte organizzazioni ipotizzano un modello ottimistico di condivisione
  164. 164. Molte organizzazioni ipotizzano un modello ottimistico di condivisione
  165. 165. Ma la realtà è decisamente diversa
  166. 166. Quanto costa mettersi d’accordo?
  167. 167. ...per non parlare della gestione delle risorse umane
  168. 168. Ma noi sappiamo che le risorse non sono
  169. 169. Ma noi sappiamo che le risorse non sono
  170. 170. La cosa giusta
  171. 171. Cosa ci rende speciali?
  172. 172. Cosa significa vincere?
  173. 173. Benefici e costi © Alberto Brandolini 2009
  174. 174. Come scegliere? Allochiamo le nostre risorse laddove possano apportare i maggiori benefici Non investiamo oltre il necessario in aree che introducono vantaggi marginali (qual è il ruolo della tecnologia in questo scenario?) © Alberto Brandolini 2009
  175. 175. … serve una Mappa © Alberto Brandolini 2009
  176. 176. Un bagno di realtà Non tutte la parti di un’applicazione non banale saranno progettate ugualmente bene ...ma alcune parti del sistema sono più importanti di altre © Alberto Brandolini 2009
  177. 177. Core Domain Specifico del nostro dominio applicativo. Il nucleo centrale dell’applicazione, le cui funzionalità ci assicurano un vantaggio competitivo. © Alberto Brandolini 2009
  178. 178. Supporting Subdomain legato al dominio applicativo, ma non in grado di garantire un vantaggio in termini di competitività. © Alberto Brandolini 2009
  179. 179. Generic Subdomain Non particolarmente legato al dominio applicativo, necessario al funzionamento complessivo dell’applicazione. © Alberto Brandolini 2009
  180. 180. Priorità Le priorità provengono dal contesto business ...e cambieranno… Per produrre software che faccia la differenza dovremo capire cosa fa la differenza © Alberto Brandolini 2009
  181. 181. References Domain Driven Design Eric Evans http://domaindrivendesign.org http://tech.groups.yahoo.com/group/ domaindrivendesign http://it.groups.yahoo.com/group/DDD-IT http://www.infoq.com/articles/ddd- contextmapping © Alberto Brandolini 2009
  182. 182. References Apply Domain Driven Design and Patterns Jimmy Nilsson Addison Wesley © Alberto Brandolini 2009
  183. 183. Domain Driven Design discussion groups • http://tech.groups.yahoo.com/group/ domaindrivendesign/ • http://it.groups.yahoo.com/group/DDD-IT/ © Alberto Brandolini 2009
  184. 184. Questions? © Alberto Brandolini 2009

×