Ricette       veloci per        Domain-         Driven        Design                      dal menù di                     ...
About me            In the IT field since ZX Spectrum            Generally in large scale projects (I might be biased)    ...
About me            Mi piace risolvere problemi            O scrivere software che li risolva            Blogger: http://z...
About me            In the IT field since ZX Spectrum            Generally in large scale projects (I might be biased)    ...
Aggregates                      It is difficult to guarantee the consistency of                      changes to objects in...
...quale miglior aggregato?venerdì 22 marzo 13
Customer!                        Customervenerdì 22 marzo 13
Customer!                        <<Entity>>                        Customervenerdì 22 marzo 13
Customer!                      <<Aggregate Root>>                          <<Entity>>                          Customerven...
Customer!                        <<Aggregate Root>>                            <<Entity>>                            Custo...
Customer!                         <<Aggregate Root>>                             <<Entity>>                             Cu...
Customer!                         <<Aggregate Root>>                             <<Entity>>                             Cu...
Domande?venerdì 22 marzo 13
Domande?       - Persistenza?venerdì 22 marzo 13
Domande?       - Persistenza?             - Fa tutto lui! :-)venerdì 22 marzo 13
Domande?       - Persistenza?             - Fa tutto lui! :-)       - Come gestisco address?venerdì 22 marzo 13
Domande?       - Persistenza?             - Fa tutto lui! :-)       - Come gestisco address?       - Dove tengo la passwor...
Domande?       - Persistenza?             - Fa tutto lui! :-)       - Come gestisco address?       - Dove tengo la passwor...
Domande?       - Persistenza?             - Fa tutto lui! :-)       - Come gestisco address?       - Dove tengo la passwor...
È un mappazzone!venerdì 22 marzo 13
Dov’è il                      comportamento?venerdì 22 marzo 13
Riproviamovenerdì 22 marzo 13
Trucco N°1                                      -                                    CQRS                      Command/Que...
!                     Architettura ottimizzata                          per i comandi?venerdì 22 marzo 13                 ...
Domain Model                                     Command       Aggregate         Event                                    ...
Non solo velocitàvenerdì 22 marzo 13
Non parleremo di                         questo...venerdì 22 marzo 13
Conceptual CQRS                                           Command      to     Domain Model         raises                 ...
Qui decide l’utente                                                        Command                                        ...
Quali informazionivenerdì 22 marzo 13
User Steps       -       L’utente decide quali comandi               invocare sul sistema sulla base               delle i...
Examples?       - Timesheet entryvenerdì 22 marzo 13
Conceptual CQRS                                           Command      to     Domain Model         raises                 ...
Vi ho tolto il DB!venerdì 22 marzo 13
Piangerenonservirà anulla...venerdì 22 marzo 13
Conceptual CQRS                                           Command      to     Domain Model         raises                 ...
Aggregates                      It is difficult to guarantee the consistency of                      changes to objects in...
Aggregate Historyvenerdì 22 marzo 13
Aggregate History       - Propagazionevenerdì 22 marzo 13
Aggregate History       - Propagazione             -        2004 una generica “comunicazione                      asincron...
Aggregate History       - Propagazione             -        2004 una generica “comunicazione                      asincron...
Aggregate History       - Propagazione             -        2004 una generica “comunicazione                      asincron...
Aggregate History       - Propagazione             -        2004 una generica “comunicazione                      asincron...
Aggregate History       - Propagazione             -        2004 una generica “comunicazione                      asincron...
Domain Model            Command     to   Domain Model   raises                                               Eventvenerdì ...
Domain Model       - Qui è dove è il sistema a               prendere le decisioni.venerdì 22 marzo 13
I dati non sono tutti iguali    Il sistema prenderà una    decisone basandosi su    questi dati  ..l’utente si baserà su  ...
Come lo preparo?venerdì 22 marzo 13
Domain Model            Command     to   Domain Model   raises                                               Eventvenerdì ...
Outside invenerdì 22 marzo 13
Non ci guardo                        dentro...venerdì 22 marzo 13
...venerdì 22 marzo 13
...                      ...ma se devo prendere le                        informazioni da un’altro                        ...
venerdì 22 marzo 13
Quando eri  bambino aprivi icassetti in camera dimamma di tuoi amici   per annusare     mutande?venerdì 22 marzo 13
Tell don’t askvenerdì 22 marzo 13
Ai fornellivenerdì 22 marzo 13
Uova al tegame                      In presenza di sufficiente calore, l’albume                      coagula più rapidamen...
“Metti un po’ di                       burro in padella,                      apri l’uovo e cuoci”venerdì 22 marzo 13
Non avete bisogno di luivenerdì 22 marzo 13
Basta leivenerdì 22 marzo 13
È un uovo!venerdì 22 marzo 13
Invariant                      An INVARIANT is a condition that can relied                      upon to be true during the...
Invarianti?    Totale = Somma(prezzoUnitario*quantità)venerdì 22 marzo 13
Comandi?        CreateEmpty                               ItemAddedToCart                      to              raises     ...
Problema       - Il prezzo degli articoli può               variare.venerdì 22 marzo 13
Quindi?venerdì 22 marzo 13
Quindi?                         No, è che ha detto                  [nome di uno troppo importante                  per pa...
Quindi?                         No, è che ha detto                  [nome di uno troppo importante                  per pa...
Quindi?                         No, è che ha detto                  [nome di uno troppo importante                  per pa...
Sòla...venerdì 22 marzo 13
Quindi?venerdì 22 marzo 13
Quindi?                         Puoi farmi un                          esempio?venerdì 22 marzo 13
Esempio       - Given item stormtrooper clothing is               priced €500 each       - And customer ziobrando added 10...
Quindi?venerdì 22 marzo 13
Quindi?                        ...?venerdì 22 marzo 13
Ma anche...venerdì 22 marzo 13
Ma anche...                                        Il                          comportamento dell’utente                  ...
Ma anche...                                        Il                          comportamento dell’utente                  ...
Che rumore                       sentite?venerdì 22 marzo 13
E’	  necessario	  un	  processo	  di	            sviluppo	  agile,	  che	  perme4a	  di	           raccogliere	  il	  feed...
gli esperti ci      e noi aiutiamoaiutano a capire           loro                           ©	  Alberto	  Brandolini	  200...
Bello. Ma oggi...venerdì 22 marzo 13
Bello. Ma oggi...                       ...aggiorniamo i                      prezzi nel carrellovenerdì 22 marzo 13
ItemPriceUpdated                            to                      <<EventHandler>>                         <<Service>>  ...
Aggregates                       all’ostricavenerdì 22 marzo 13
Domain Model       - Qui è dove è il sistema a               prendere le decisioni.       -       ...sulla basi di quali  ...
I dati non sono tutti iguali    Il sistema prenderà una    decisone basandosi su    questi dati  ..l’utente si baserà su  ...
Ho bisogno dell’albume?venerdì 22 marzo 13
Solo i dati significativiper l’esecuzione sonomodellati          CreateEmpty                                   ItemAddedTo...
Che ci faccio con l’albume?venerdì 22 marzo 13
Che ci faccio con l’albume?venerdì 22 marzo 13
...il read model!                      Read Model                          n                                   updates   P...
I sapori fondamentalivenerdì 22 marzo 13
I sapori fondamentali                      Dolcevenerdì 22 marzo 13
I sapori fondamentali                      Dolce                      Amarovenerdì 22 marzo 13
I sapori fondamentali                      Dolce                      Amaro                      Salatovenerdì 22 marzo 13
I sapori fondamentali                      Dolce                      Amaro                      Salato                   ...
I sapori fondamentali                      Dolce                      Amaro                      Salato                   ...
Che [*] é umami?     [*] = Colorita espressione regionalevenerdì 22 marzo 13
Che [*] é un                      invariante?     [*] = Colorita espressione regionalevenerdì 22 marzo 13
3 modelli       - Costruzione       - Esecuzione       - Controllovenerdì 22 marzo 13
...le invarianti si semplificano       -       comportamento differenziato       - condizioni più precise       - possibil...
Davvero avete                 così fretta?venerdì 22 marzo 13
Comunque...                                geteventstore.comvenerdì 22 marzo 13
Domain-Driven Design                      Eric Evans                           Enterprise Integration                     ...
Implementing Domain-Driven Design  Vaughn Vernonhttp://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0...
venerdì 22 marzo 13
Grazie!                       @ziobrando          Alberto.brandolini@avanscoperta.itvenerdì 22 marzo 13
Upcoming SlideShare
Loading in …5
×

Ricette veloci per Domain-Driven Design by Alberto Brandolini

1,274 views

Published on

Come modelliamo gli aggregati? Qual è la strategia migliore per implementare un dominio complesso. Ci sono pattern ricorrenti nell’implementazione di applicazioni in DDD? Per quale motivo dovrei utilizzare CQRS? E se i Maya avessero avuto ragione e non ce ne fossimo accorti? Queste ed altre domande ancora…

Published in: Technology

Ricette veloci per Domain-Driven Design by Alberto Brandolini

  1. 1. Ricette veloci per Domain- Driven Design dal menù di @ziobrandovenerdì 22 marzo 13
  2. 2. About me In the IT field since ZX Spectrum Generally in large scale projects (I might be biased) Strategic IT Consultant Trainer (Avanscoperta & Skills Matter) Technical Writer Blogger: http://ziobrando.blogspot.com Twitter: @ziobrando My e-mail: alberto.brandolini@gmail.comvenerdì 22 marzo 13
  3. 3. About me Mi piace risolvere problemi O scrivere software che li risolva Blogger: http://ziobrando.blogspot.com Twitter: @ziobrando My e-mail: alberto.brandolini@gmail.comvenerdì 22 marzo 13
  4. 4. About me In the IT field since ZX Spectrum Generally in large scale projects (I might be biased) Strategic IT Consultant Trainer (Avanscoperta & Skills Matter) Technical Writer Blogger: http://ziobrando.blogspot.com Twitter: @ziobrando My e-mail: alberto.brandolini@gmail.comvenerdì 22 marzo 13
  5. 5. Aggregates It is difficult to guarantee the consistency of changes to objects in a model with complex associations. Invariants need to be maintained that apply to closely related groups of objects, not just discrete objects. An AGGREGATE is a cluster of associated objects that we treat as a unit for the purpose of data changes.venerdì 22 marzo 13
  6. 6. ...quale miglior aggregato?venerdì 22 marzo 13
  7. 7. Customer! Customervenerdì 22 marzo 13
  8. 8. Customer! <<Entity>> Customervenerdì 22 marzo 13
  9. 9. Customer! <<Aggregate Root>> <<Entity>> Customervenerdì 22 marzo 13
  10. 10. Customer! <<Aggregate Root>> <<Entity>> Customer nome cognomevenerdì 22 marzo 13
  11. 11. Customer! <<Aggregate Root>> <<Entity>> Customer nome cognome username emailAddressvenerdì 22 marzo 13
  12. 12. Customer! <<Aggregate Root>> <<Entity>> Customer nome cognome username emailAddress address country languagevenerdì 22 marzo 13
  13. 13. Domande?venerdì 22 marzo 13
  14. 14. Domande? - Persistenza?venerdì 22 marzo 13
  15. 15. Domande? - Persistenza? - Fa tutto lui! :-)venerdì 22 marzo 13
  16. 16. Domande? - Persistenza? - Fa tutto lui! :-) - Come gestisco address?venerdì 22 marzo 13
  17. 17. Domande? - Persistenza? - Fa tutto lui! :-) - Come gestisco address? - Dove tengo la password?venerdì 22 marzo 13
  18. 18. Domande? - Persistenza? - Fa tutto lui! :-) - Come gestisco address? - Dove tengo la password?venerdì 22 marzo 13
  19. 19. Domande? - Persistenza? - Fa tutto lui! :-) - Come gestisco address? - Dove tengo la password?venerdì 22 marzo 13
  20. 20. È un mappazzone!venerdì 22 marzo 13
  21. 21. Dov’è il comportamento?venerdì 22 marzo 13
  22. 22. Riproviamovenerdì 22 marzo 13
  23. 23. Trucco N°1 - CQRS Command/Query Responsibility Segregationvenerdì 22 marzo 13
  24. 24. ! Architettura ottimizzata per i comandi?venerdì 22 marzo 13 Architettura ottimizzata per le letture
  25. 25. Domain Model Command Aggregate Event Event store Event Event Event UI Event Command Aggregate Event Presentation Event UI Event UI Projection DTO Projection UI DTO Read Modelvenerdì 22 marzo 13
  26. 26. Non solo velocitàvenerdì 22 marzo 13
  27. 27. Non parleremo di questo...venerdì 22 marzo 13
  28. 28. Conceptual CQRS Command to Domain Model raises issues Event User Read Model influences notified to influences updates Projection External information Warning! non è architettura...venerdì 22 marzo 13
  29. 29. Qui decide l’utente Command issues User Read Model influences influences External informationvenerdì 22 marzo 13
  30. 30. Quali informazionivenerdì 22 marzo 13
  31. 31. User Steps - L’utente decide quali comandi invocare sul sistema sulla base delle informazioni derivanti dalla sua esperienza, e da quanto reso disponibile dall’applicazionevenerdì 22 marzo 13
  32. 32. Examples? - Timesheet entryvenerdì 22 marzo 13
  33. 33. Conceptual CQRS Command to Domain Model raises issues Event User Read Model influences notified to influences updates Projection External informationvenerdì 22 marzo 13
  34. 34. Vi ho tolto il DB!venerdì 22 marzo 13
  35. 35. Piangerenonservirà anulla...venerdì 22 marzo 13
  36. 36. Conceptual CQRS Command to Domain Model raises issues Event User Read Model influences notified to influences updates Projection External informationvenerdì 22 marzo 13
  37. 37. Aggregates It is difficult to guarantee the consistency of changes to objects in a model with complex associations. Invariants need to be maintained that apply to closely related groups of objects, not just discrete objects. An AGGREGATE is a cluster of associated objects that we treat as a unit for the purpose of data changes.venerdì 22 marzo 13
  38. 38. Aggregate Historyvenerdì 22 marzo 13
  39. 39. Aggregate History - Propagazionevenerdì 22 marzo 13
  40. 40. Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona”venerdì 22 marzo 13
  41. 41. Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona” - 2010 ... Domain Eventsvenerdì 22 marzo 13
  42. 42. Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona” - 2010 ... Domain Events - Struttura interna:venerdì 22 marzo 13
  43. 43. Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona” - 2010 ... Domain Events - Struttura interna: - 2004: “Don’t fight your frameworks”venerdì 22 marzo 13
  44. 44. Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona” - 2010 ... Domain Events - Struttura interna: - 2004: “Don’t fight your frameworks” - ORM / NoSQL / Event Sourcing / Functional...venerdì 22 marzo 13
  45. 45. Domain Model Command to Domain Model raises Eventvenerdì 22 marzo 13
  46. 46. Domain Model - Qui è dove è il sistema a prendere le decisioni.venerdì 22 marzo 13
  47. 47. I dati non sono tutti iguali Il sistema prenderà una decisone basandosi su questi dati ..l’utente si baserà su questi, ed altro...venerdì 22 marzo 13
  48. 48. Come lo preparo?venerdì 22 marzo 13
  49. 49. Domain Model Command to Domain Model raises Eventvenerdì 22 marzo 13
  50. 50. Outside invenerdì 22 marzo 13
  51. 51. Non ci guardo dentro...venerdì 22 marzo 13
  52. 52. ...venerdì 22 marzo 13
  53. 53. ... ...ma se devo prendere le informazioni da un’altro aggregato?venerdì 22 marzo 13
  54. 54. venerdì 22 marzo 13
  55. 55. Quando eri bambino aprivi icassetti in camera dimamma di tuoi amici per annusare mutande?venerdì 22 marzo 13
  56. 56. Tell don’t askvenerdì 22 marzo 13
  57. 57. Ai fornellivenerdì 22 marzo 13
  58. 58. Uova al tegame In presenza di sufficiente calore, l’albume coagula più rapidamente del tuorlo. che è più digeribile in forma liquida. Un UOVO AL TEGAME si ottiene ponendo l’uovo sgusciato su una superficie piana, calda e non aderente, per un tempo sufficientemente lungo da consentire la coagulazione dell’albume, preservando il tuorlo.venerdì 22 marzo 13
  59. 59. “Metti un po’ di burro in padella, apri l’uovo e cuoci”venerdì 22 marzo 13
  60. 60. Non avete bisogno di luivenerdì 22 marzo 13
  61. 61. Basta leivenerdì 22 marzo 13
  62. 62. È un uovo!venerdì 22 marzo 13
  63. 63. Invariant An INVARIANT is a condition that can relied upon to be true during the execution of a program.venerdì 22 marzo 13
  64. 64. Invarianti? Totale = Somma(prezzoUnitario*quantità)venerdì 22 marzo 13
  65. 65. Comandi? CreateEmpty ItemAddedToCart to raises RemoveItem to Cart raises ItemRemovedFromCart to raises AddItem CartCreated Totale = Somma(prezzoUnitario*quantità)venerdì 22 marzo 13
  66. 66. Problema - Il prezzo degli articoli può variare.venerdì 22 marzo 13
  67. 67. Quindi?venerdì 22 marzo 13
  68. 68. Quindi? No, è che ha detto [nome di uno troppo importante per parlare con voi] che il prezzo può cambiare...venerdì 22 marzo 13
  69. 69. Quindi? No, è che ha detto [nome di uno troppo importante per parlare con voi] che il prezzo può cambiare... ...e va implementata per dopodomani.venerdì 22 marzo 13
  70. 70. Quindi? No, è che ha detto [nome di uno troppo importante per parlare con voi] che il prezzo può cambiare... ...e va Doveva già essere implementata per così. dopodomani.venerdì 22 marzo 13
  71. 71. Sòla...venerdì 22 marzo 13
  72. 72. Quindi?venerdì 22 marzo 13
  73. 73. Quindi? Puoi farmi un esempio?venerdì 22 marzo 13
  74. 74. Esempio - Given item stormtrooper clothing is priced €500 each - And customer ziobrando added 10 of stormtrooper clothing to cart - When price for stormtrooper clothing is updated to €750 each - Then ???venerdì 22 marzo 13
  75. 75. Quindi?venerdì 22 marzo 13
  76. 76. Quindi? ...?venerdì 22 marzo 13
  77. 77. Ma anche...venerdì 22 marzo 13
  78. 78. Ma anche... Il comportamento dell’utente cambia se la variazione di prezzo è favorevole o sfavorevole: possiamo applicare immediatamente gli sconti, e bloccare i rincari per un giorno.venerdì 22 marzo 13
  79. 79. Ma anche... Il comportamento dell’utente cambia se la variazione di prezzo è favorevole o sfavorevole: possiamo applicare immediatamente gli sconti, e bloccare i rincari per un per ...ma solo giorno. alcuni articolivenerdì 22 marzo 13
  80. 80. Che rumore sentite?venerdì 22 marzo 13
  81. 81. E’  necessario  un  processo  di   sviluppo  agile,  che  perme4a  di   raccogliere  il  feedback  di  uten)  e   domain  experts,  in  iterazioni  brevi. collaborazione creativa ©  Alberto  Brandolini  2009venerdì 22 marzo 13
  82. 82. gli esperti ci e noi aiutiamoaiutano a capire loro ©  Alberto  Brandolini  2009venerdì 22 marzo 13
  83. 83. Bello. Ma oggi...venerdì 22 marzo 13
  84. 84. Bello. Ma oggi... ...aggiorniamo i prezzi nel carrellovenerdì 22 marzo 13
  85. 85. ItemPriceUpdated to <<EventHandler>> <<Service>> …? raises CartPriceUpdated UpdateItemPrice raises to ItemAddedToCart CreateEmpty to raises Cart raises ItemRemovedFromCart to RemoveItem raises to CartCreated AddItemvenerdì 22 marzo 13
  86. 86. Aggregates all’ostricavenerdì 22 marzo 13
  87. 87. Domain Model - Qui è dove è il sistema a prendere le decisioni. - ...sulla basi di quali informazioni?venerdì 22 marzo 13
  88. 88. I dati non sono tutti iguali Il sistema prenderà una decisone basandosi su questi dati ..l’utente si baserà su questi, ed altro...venerdì 22 marzo 13
  89. 89. Ho bisogno dell’albume?venerdì 22 marzo 13
  90. 90. Solo i dati significativiper l’esecuzione sonomodellati CreateEmpty ItemAddedToCart to raises RemoveItem to Cart raises ItemRemovedFromCart to raises AddItem CartCreated ...tutto il contenuto informativo è propagato attraverso gli eventivenerdì 22 marzo 13
  91. 91. Che ci faccio con l’albume?venerdì 22 marzo 13
  92. 92. Che ci faccio con l’albume?venerdì 22 marzo 13
  93. 93. ...il read model! Read Model n updates Projectionvenerdì 22 marzo 13
  94. 94. I sapori fondamentalivenerdì 22 marzo 13
  95. 95. I sapori fondamentali Dolcevenerdì 22 marzo 13
  96. 96. I sapori fondamentali Dolce Amarovenerdì 22 marzo 13
  97. 97. I sapori fondamentali Dolce Amaro Salatovenerdì 22 marzo 13
  98. 98. I sapori fondamentali Dolce Amaro Salato Asprovenerdì 22 marzo 13
  99. 99. I sapori fondamentali Dolce Amaro Salato Aspro Umamivenerdì 22 marzo 13
  100. 100. Che [*] é umami? [*] = Colorita espressione regionalevenerdì 22 marzo 13
  101. 101. Che [*] é un invariante? [*] = Colorita espressione regionalevenerdì 22 marzo 13
  102. 102. 3 modelli - Costruzione - Esecuzione - Controllovenerdì 22 marzo 13
  103. 103. ...le invarianti si semplificano - comportamento differenziato - condizioni più precise - possibilità di applicare una differente semantica: es warning vs blocker - fare le domande giustevenerdì 22 marzo 13
  104. 104. Davvero avete così fretta?venerdì 22 marzo 13
  105. 105. Comunque... geteventstore.comvenerdì 22 marzo 13
  106. 106. Domain-Driven Design Eric Evans Enterprise Integration Patterns Gregor Hohpe, Bobby Woolf Patterns of Enterprise Application Architecture Martin Fowler Per saperne di più... www.avanscoperta.itvenerdì 22 marzo 13
  107. 107. Implementing Domain-Driven Design Vaughn Vernonhttp://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577 Event Centric Greg Young http://www.amazon.com/Event-Centric-Simplicity-Addison-Wesley-Signature/dp/0321768221 Per saperne di più... www.avanscoperta.itvenerdì 22 marzo 13
  108. 108. venerdì 22 marzo 13
  109. 109. Grazie! @ziobrando Alberto.brandolini@avanscoperta.itvenerdì 22 marzo 13

×