http://creativecommons.org/licenses/by-nc-nd/2.5/                                                       idiomatic Domain D...
Grazie!      managed/designs
Leggere attentamente le     avvertenze…(Quasi) Tutte le demo saranno basate su NSK, unframework di e-commerce sviluppato i...
Andrea Saltarello! Chi era        costui?1. C.T.O. di Managed Designs, alla ricerca della   «sostenibilità dello sviluppo ...
Once upon a time…1. Acquistai il [P of EAA] a febbraio 2003, lo lessi   e… «estiqaatsi?»2. Acquistai il «Blue Book» appena...
Innanzitutto…•   Ubiquitous Language•   Ubiquitous Language•   Ubiquitous Language•   Ubiquitous Language•   Ubiquitous La...
Ubiquitous LanguageDEMO
One More Thing… (cit.)    Non è «Lascia o Raddoppia»
Blue Book: Architettura (1/2)
Blue Book: Architettura (2/2)• è una layered architecture• i layer Presentation e Infrastructure  compaiono «per sport» ne...
Domain vs. Application:Amazon web siteDEMO
Domain layer: Key Concepts • Il Domain Layer contiene la domain logic ed è composto   da    – Model: Entità (identità e st...
Domain ModelDEMO
Da 0 ad Aggregate• E un insieme di elementi raggruppati in un’unità  logica, quindi un grafo di oggetti• Ha come radice le...
AggregateDEMO
One More Thing… (cit.)E’ DDD, non «Il Signore degli Anelli», quindi:     Assert.IsFalse(OneModelToRuleThemAll);
Repository pattern: in teoriaA system with a complex domain model often benefits from alayer, such as the one provided by ...
Repository pattern: in pratica  Mediates between the domain and data mapping layers  using a collection-like interface for...
RepositoryDEMO
Application Layer: in teoriaApplication Layer: defines the jobs the software issupposed to do and directs the expressive d...
Application Layer: in praticaE’ un catalogo di servizi in grado di effettuare ilmesh della logica presente nel domain laye...
DDD vs Real WorldAvere a disposizione un domain layer «smart» è bello,ma costoso:   – Materializzazione degli oggetti   – ...
Layered Expression Trees (LET idiom)Facciamo un gioco: invece di definire un «botto» diDTO, facciamo che layer e servizi s...
Layered Expression TreesDEMO
LET idiom feat. Ubiquitous Language LET aumenta la pervasività dell’Ubiquitous Language nel codice:   recommendedProducts ...
And now for something completely different
Command Query Responsibility           SegregationCommand and Query Responsibility Segregation (CQRS)originated with Bertr...
Command Query Responsibility      Segregation     Query                 Command
CQRSDEMO
Books & Publications[DDD] Domain Driven Design, Eric Evans ,  Addison-Wesley[P of EAA] Pattern of Enterprise  Application ...
Upcoming SlideShare
Loading in...5
×

How I did it (in .NET): idiomatic Domain Driven Design

1,361

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,361
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
36
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

How I did it (in .NET): idiomatic Domain Driven Design

  1. 1. http://creativecommons.org/licenses/by-nc-nd/2.5/ idiomatic Domain Driven Design Andrea Saltarello C.T.O. @ managed/designs http://blogs.ugidotnet.org/pape http://twitter.com/andysal74
  2. 2. Grazie! managed/designs
  3. 3. Leggere attentamente le avvertenze…(Quasi) Tutte le demo saranno basate su NSK, unframework di e-commerce sviluppato in bottega escaricabile qui con licenza open source.N.B.: NSK è come il galeone di Dylan Dog: non èmai terminato, quindi non tutti i check-in sonocome la caramella Polo (cioè «riusciti col buco»)
  4. 4. Andrea Saltarello! Chi era costui?1. C.T.O. di Managed Designs, alla ricerca della «sostenibilità dello sviluppo software» – Il cliente «deve» essere soddisfatto e pagare – Il fornitore «deve» avere un margine ragionevole – Il team «deve» essere soddisfatto del proprio lavoro2. Fondatore e presidente di UGIdotNET: ho bisogno di condividere esperienze a causa del bullet precedente 3. (Co)Autore di .NET: Architecting Applications for the Enterprise di Microsoft Press – Il #NAAE è il mio giornale di bordo, nel quale (nel 2008) ho cercato di «sintetizzare» i punti 1 e 2 
  5. 5. Once upon a time…1. Acquistai il [P of EAA] a febbraio 2003, lo lessi e… «estiqaatsi?»2. Acquistai il «Blue Book» appena uscito (2004), lo lessi e… «estiqaatsi?»3. In poche parole: come «passo» dal libro al mondo reale?
  6. 6. Innanzitutto…• Ubiquitous Language• Ubiquitous Language• Ubiquitous Language• Ubiquitous Language• Ubiquitous Language• Ubiquitous Language• Ubiquitous Language
  7. 7. Ubiquitous LanguageDEMO
  8. 8. One More Thing… (cit.) Non è «Lascia o Raddoppia»
  9. 9. Blue Book: Architettura (1/2)
  10. 10. Blue Book: Architettura (2/2)• è una layered architecture• i layer Presentation e Infrastructure compaiono «per sport» nel diagramma• i layer Application e Domain costituiscono quella che tipicamente chiamiamo «business logic» – Domain: logica invariante rispetto ai casi d’uso – Application: logica specifica ai casi d’uso
  11. 11. Domain vs. Application:Amazon web siteDEMO
  12. 12. Domain layer: Key Concepts • Il Domain Layer contiene la domain logic ed è composto da – Model: Entità (identità e stato) e Valori (solo stato) – Servizi • Il Model è «both data and behaviour» (cit.) • La persistenza del Model è gestita da Repository • Le istanze delle entità di dominio sono costruite da Factory • Entità e Valori a runtime formano dei grafi di oggetti. I grafi dotati di “dignità propria” sono chiamati Aggregate e il sistema (es: i Repository) si “impegna” a gestirli correttamente ed atomicamente
  13. 13. Domain ModelDEMO
  14. 14. Da 0 ad Aggregate• E un insieme di elementi raggruppati in un’unità logica, quindi un grafo di oggetti• Ha come radice lentità principale dellaggregato• La radice è l’unico elemento che può essere referenziato fuori dai confini dell’aggregato• Non è possibile agire direttamente sugli elementi senza passare dalla radice dellaggregato• L’aggregate ha la responsabilità di implementare la propria logica
  15. 15. AggregateDEMO
  16. 16. One More Thing… (cit.)E’ DDD, non «Il Signore degli Anelli», quindi: Assert.IsFalse(OneModelToRuleThemAll);
  17. 17. Repository pattern: in teoriaA system with a complex domain model often benefits from alayer, such as the one provided by Data Mapper (165), thatisolates domain objects from details of the database accesscode. In such systems it can be worthwhile to build anotherlayer of abstraction over the mapping layer where queryconstruction code is concentrated.This becomes moreimportant when there are a large number of domain classesor heavy querying. In these cases particularly, adding this layerhelps minimize duplicate query logic.…You can also find a good write-up of this pattern in DomainDriven Design.
  18. 18. Repository pattern: in pratica Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects. Ricapitolando: • Interfaccia “collection like” • Gestisce la persistenza degli Aggregate • LINQ! (siamo dei buongustai )
  19. 19. RepositoryDEMO
  20. 20. Application Layer: in teoriaApplication Layer: defines the jobs the software issupposed to do and directs the expressive domainobjects to work out problems. The tasks this layer isresponsible for are meaningful to the business ornecessary for interaction with the application layersof other systems. This layer is kept thin. It doesnot contain business rules or knowledge, but onlycoordinates tasks and delegates work tocollaborations of domain objects in the next layerdown. It does not have state reflecting the businesssituation, but it can have state that reflects theprogress of a task for the user or the program.
  21. 21. Application Layer: in praticaE’ un catalogo di servizi in grado di effettuare ilmesh della logica presente nel domain layeresponendola alla applicazione (es: presentationlayer) in una forma ad… Alta digeribilità.
  22. 22. DDD vs Real WorldAvere a disposizione un domain layer «smart» è bello,ma costoso: – Materializzazione degli oggetti – Mesh della business logicTipicamente, si finisce per passare la vita a «fareDTO»: – Application Layer <-> Presentation Layer – («ma anche» cit.) Domain Layer <-> Application Layer
  23. 23. Layered Expression Trees (LET idiom)Facciamo un gioco: invece di definire un «botto» diDTO, facciamo che layer e servizi si scambino degliIQueryable<YourFavouriteDomainEntity>, facendo«emergere» la query e specificando la proiezione soloall’ultimo momento?L’espressione «Capra e cavoli» vi dice niente? P.S.: Si, «botto» è un ordine di grandezza del S.I. Kilo->Mega->Giga->Tera->Peta->Botto
  24. 24. Layered Expression TreesDEMO
  25. 25. LET idiom feat. Ubiquitous Language LET aumenta la pervasività dell’Ubiquitous Language nel codice: recommendedProducts = (from p in CatalogServices.GetAvailableProductsOnSale() orderby p.UnitsInStock descending select new ProductDescriptor { Id = p.Id, Name = p.Name, UnitPrice = p.UnitPrice, UnitsInStock = p.UnitsInStock, }).Take(3); Questa query è «quasi» scritta nel linguaggio del Domain Expert
  26. 26. And now for something completely different
  27. 27. Command Query Responsibility SegregationCommand and Query Responsibility Segregation (CQRS)originated with Bertrand Meyer’s Command and QuerySeparation Principle. Wikipedia defines the principle as:It states that every method should either be a command that performsan action, or a query that returns data to the caller, but not both.Command and Query Responsibility Segregation uses the samedefinition of Commands and Queries that Meyer used andmaintains the viewpoint that they should be pure. Thefundamental difference is that in CQRS objects are split into twoobjects, one containing the Commands one containing theQueries. [Fonte: http://cqrsinfo.com/documents/cqrs-introduction/ ]
  28. 28. Command Query Responsibility Segregation Query Command
  29. 29. CQRSDEMO
  30. 30. Books & Publications[DDD] Domain Driven Design, Eric Evans , Addison-Wesley[P of EAA] Pattern of Enterprise Application Architecture, Martin Fowler, Addison-Wesley[NAAE] Microsoft .NET: Architecting Applications for the Enterprise, Andrea Saltarello & Dino Esposito, Microsoft Press[NSK] NSK, http://nsk.codeplex.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×