DATA01Build a LINQ-enabledRepository<br />Community Days - Milano, 16 e 17 dicembre 2010<br />Andrea Saltarello<br />Archi...
Agenda<br />Chi<br />Perché<br />Come<br />Quisquilie IT<br />Q&A<br />
Repository pattern [P of EAA, 322]<br />Mediates between the domain and data mapping layers using a collection-like interf...
Repository pattern<br />A system with a complex domain model often benefits from a layer, such as the one provided by Data...
Repository: as easy as 1-2-3<br />Il Repository occorre per persistere un Domain Model<br />La «Bibbia» del Domain Model è...
DDD Architecture<br />
DDD KeyConcepts (redux)<br />Il Domain Layer contiene la domain logic ed è composto da<br />Model: Entità (identità e stat...
Da 0 ad Aggregate<br />E' un insieme di elementi raggruppati in un’unità logica, quindi un grafo di oggetti<br />Ha come r...
Domain Model<br />
Repository pattern (Reloaded)<br />Mediates between the domain and data mapping layers using a collection-like interface f...
Gestisce la persistenzadegli Aggregate
LINQ! (siamodeibuongustai)</li></li></ul><li>IRepository<T><br />
Repository++<br />Quisquilie IT:<br />Code Contracts<br />Repository <3 IoC<br />
Demo code: NSK<br />Progetto open source (licenza CPL) disponibile su CodePlex: http://nsk.codeplex.com<br />
Bibliografia<br />[DDD] Domain Driven Design, Eric Evans, Addison-Wesley<br />[P of EAA] Pattern of Enterprise Application...
Contatti<br />Mail: andrea.saltarello@ugidotnet.org<br />Twitter: http://twitter.com/andysal74<br />Blog: http://blogs.ugi...
Upcoming SlideShare
Loading in …5
×

Build a LINQ-enabled Repository

1,121 views

Published on

In questa sessione vedremo come realizzare un Data Access Layer basato su una implementazione del Repository pattern ed in grado di essere interrogabile mediante query LINQ, eventualmente delegate ad O/RM quali Entity Framework e/o NHibernate. Vedremo inoltre come fare utilizzo dei Code Contracts del FX4 per specificare "una tantum" le regole comuni a tutti i repository di un Domain Model.

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

  • Be the first to like this

No Downloads
Views
Total views
1,121
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Build a LINQ-enabled Repository

  1. 1. DATA01Build a LINQ-enabledRepository<br />Community Days - Milano, 16 e 17 dicembre 2010<br />Andrea Saltarello<br />Architect @ ManagedDesigns s.r.l.<br />andrea.saltarello@ugidotnet.org<br />http://blogs.ugidotnet.org/pape<br />http://twitter.com/andysal74<br />http://creativecommons.org/licenses/by-nc-nd/2.5/<br />
  2. 2. Agenda<br />Chi<br />Perché<br />Come<br />Quisquilie IT<br />Q&A<br />
  3. 3. Repository pattern [P of EAA, 322]<br />Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.<br />
  4. 4. Repository pattern<br />A system with a complex domain model often benefits from a layer, such as the one provided by Data Mapper (165), that isolates domain objects from details of the database access code. In such systems it can be worthwhile to build another layer of abstraction over the mapping layer where query construction code is concentrated. This becomes more important when there are a large number of domain classes or heavy querying. In these cases particularly, adding this layer helps minimize duplicate query logic.<br />…<br />You can also find a good write-up of this pattern in Domain Driven Design.<br />
  5. 5. Repository: as easy as 1-2-3<br />Il Repository occorre per persistere un Domain Model<br />La «Bibbia» del Domain Model è [DDD]<br />E vediamolo, ‘sto DDD <br />
  6. 6. DDD Architecture<br />
  7. 7. DDD KeyConcepts (redux)<br />Il Domain Layer contiene la domain logic ed è composto da<br />Model: Entità (identità e stato) e Valori (solo stato)<br />Servizi<br />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<br />Le istanze di entità/aggregate sono costruite da Factory(pattern Builder [GoF])<br />
  8. 8. Da 0 ad Aggregate<br />E' un insieme di elementi raggruppati in un’unità logica, quindi un grafo di oggetti<br />Ha come radice l'entità principale dell'aggregato<br />La radice è l’unico elemento che può essere referenziato fuori dai confini dell’aggregato<br />Non è possibile agire direttamente sugli elementi senza passare dalla radice dell'aggregato<br />L’aggregate ha la responsabilità di implementare la propria logica<br />
  9. 9. Domain Model<br />
  10. 10. Repository pattern (Reloaded)<br />Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.<br />Ricapitolando:<br /><ul><li>Interfaccia “collection like”
  11. 11. Gestisce la persistenzadegli Aggregate
  12. 12. LINQ! (siamodeibuongustai)</li></li></ul><li>IRepository<T><br />
  13. 13. Repository++<br />Quisquilie IT:<br />Code Contracts<br />Repository <3 IoC<br />
  14. 14. Demo code: NSK<br />Progetto open source (licenza CPL) disponibile su CodePlex: http://nsk.codeplex.com<br />
  15. 15. Bibliografia<br />[DDD] Domain Driven Design, Eric Evans, Addison-Wesley<br />[P of EAA] Pattern of Enterprise Application Architecture, Martin Fowler, Addison-Wesley<br />
  16. 16. Contatti<br />Mail: andrea.saltarello@ugidotnet.org<br />Twitter: http://twitter.com/andysal74<br />Blog: http://blogs.ugidotnet.org/pape<br />Lavoro: http://www.manageddesigns.it<br />
  17. 17. Slides e materiale<br />Nei prossimi giorni su<br />http://www.communitydays.it/<br />

×