Ricette veloci per Domain-Driven Design by Alberto Brandolini
Upcoming SlideShare
Loading in...5
×
 

Ricette veloci per Domain-Driven Design by Alberto Brandolini

on

  • 1,067 views

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 ...

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…

Statistics

Views

Total Views
1,067
Views on SlideShare
999
Embed Views
68

Actions

Likes
5
Downloads
16
Comments
0

3 Embeds 68

http://rome.codemotionworld.com 37
https://twitter.com 29
http://callforpaper.codemotionworld.com 2

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

Ricette veloci per Domain-Driven Design by Alberto Brandolini Ricette veloci per Domain-Driven Design by Alberto Brandolini Presentation Transcript

  • Ricette veloci per Domain- Driven Design dal menù di @ziobrandovenerdì 22 marzo 13
  • 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
  • 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
  • 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
  • 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
  • ...quale miglior aggregato?venerdì 22 marzo 13
  • Customer! Customervenerdì 22 marzo 13
  • Customer! <<Entity>> Customervenerdì 22 marzo 13
  • Customer! <<Aggregate Root>> <<Entity>> Customervenerdì 22 marzo 13
  • Customer! <<Aggregate Root>> <<Entity>> Customer nome cognomevenerdì 22 marzo 13
  • Customer! <<Aggregate Root>> <<Entity>> Customer nome cognome username emailAddressvenerdì 22 marzo 13
  • Customer! <<Aggregate Root>> <<Entity>> Customer nome cognome username emailAddress address country languagevenerdì 22 marzo 13
  • 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 password?venerdì 22 marzo 13
  • Domande? - Persistenza? - Fa tutto lui! :-) - Come gestisco address? - Dove tengo la password?venerdì 22 marzo 13
  • Domande? - Persistenza? - Fa tutto lui! :-) - Come gestisco address? - Dove tengo la password?venerdì 22 marzo 13
  • È un mappazzone!venerdì 22 marzo 13
  • Dov’è il comportamento?venerdì 22 marzo 13
  • Riproviamovenerdì 22 marzo 13
  • Trucco N°1 - CQRS Command/Query Responsibility Segregationvenerdì 22 marzo 13
  • ! Architettura ottimizzata per i comandi?venerdì 22 marzo 13 Architettura ottimizzata per le letture
  • 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
  • Non solo velocitàvenerdì 22 marzo 13
  • Non parleremo di questo...venerdì 22 marzo 13
  • 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
  • Qui decide l’utente Command issues User Read Model influences influences External informationvenerdì 22 marzo 13
  • Quali informazionivenerdì 22 marzo 13
  • 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
  • Examples? - Timesheet entryvenerdì 22 marzo 13
  • Conceptual CQRS Command to Domain Model raises issues Event User Read Model influences notified to influences updates Projection External informationvenerdì 22 marzo 13
  • Vi ho tolto il DB!venerdì 22 marzo 13
  • Piangerenonservirà anulla...venerdì 22 marzo 13
  • Conceptual CQRS Command to Domain Model raises issues Event User Read Model influences notified to influences updates Projection External informationvenerdì 22 marzo 13
  • 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
  • Aggregate Historyvenerdì 22 marzo 13
  • Aggregate History - Propagazionevenerdì 22 marzo 13
  • Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona”venerdì 22 marzo 13
  • Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona” - 2010 ... Domain Eventsvenerdì 22 marzo 13
  • Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona” - 2010 ... Domain Events - Struttura interna:venerdì 22 marzo 13
  • Aggregate History - Propagazione - 2004 una generica “comunicazione asincrona” - 2010 ... Domain Events - Struttura interna: - 2004: “Don’t fight your frameworks”venerdì 22 marzo 13
  • 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
  • Domain Model Command to Domain Model raises Eventvenerdì 22 marzo 13
  • 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 questi, ed altro...venerdì 22 marzo 13
  • Come lo preparo?venerdì 22 marzo 13
  • Domain Model Command to Domain Model raises Eventvenerdì 22 marzo 13
  • 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 aggregato?venerdì 22 marzo 13
  • 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ù 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
  • “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 execution of a program.venerdì 22 marzo 13
  • Invarianti? Totale = Somma(prezzoUnitario*quantità)venerdì 22 marzo 13
  • Comandi? CreateEmpty ItemAddedToCart to raises RemoveItem to Cart raises ItemRemovedFromCart to raises AddItem CartCreated Totale = Somma(prezzoUnitario*quantità)venerdì 22 marzo 13
  • 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 parlare con voi] che il prezzo può cambiare...venerdì 22 marzo 13
  • 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
  • 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
  • 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 of stormtrooper clothing to cart - When price for stormtrooper clothing is updated to €750 each - Then ???venerdì 22 marzo 13
  • Quindi?venerdì 22 marzo 13
  • Quindi? ...?venerdì 22 marzo 13
  • Ma anche...venerdì 22 marzo 13
  • 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
  • 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
  • Che rumore sentite?venerdì 22 marzo 13
  • 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
  • gli esperti ci e noi aiutiamoaiutano a capire loro ©  Alberto  Brandolini  2009venerdì 22 marzo 13
  • Bello. Ma oggi...venerdì 22 marzo 13
  • Bello. Ma oggi... ...aggiorniamo i prezzi nel carrellovenerdì 22 marzo 13
  • 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
  • Aggregates all’ostricavenerdì 22 marzo 13
  • Domain Model - Qui è dove è il sistema a prendere le decisioni. - ...sulla basi di quali informazioni?venerdì 22 marzo 13
  • 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
  • Ho bisogno dell’albume?venerdì 22 marzo 13
  • 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
  • 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 Projectionvenerdì 22 marzo 13
  • 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 Asprovenerdì 22 marzo 13
  • I sapori fondamentali Dolce Amaro Salato Aspro Umamivenerdì 22 marzo 13
  • 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 - possibilità di applicare una differente semantica: es warning vs blocker - fare le domande giustevenerdì 22 marzo 13
  • Davvero avete così fretta?venerdì 22 marzo 13
  • Comunque... geteventstore.comvenerdì 22 marzo 13
  • 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
  • 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
  • venerdì 22 marzo 13
  • Grazie! @ziobrando Alberto.brandolini@avanscoperta.itvenerdì 22 marzo 13