SlideShare a Scribd company logo
DATA01Build a LINQ-enabledRepositoryCommunity Days - Milano, 16 e 17 dicembre 2010Andrea SaltarelloArchitect @ ManagedDesigns s.r.l.andrea.saltarello@ugidotnet.orghttp://blogs.ugidotnet.org/papehttp://twitter.com/andysal74http://creativecommons.org/licenses/by-nc-nd/2.5/
AgendaChiPerchéComeQuisquilie ITQ&A
Repository pattern [P of EAA, 322]Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.
Repository patternA 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.…You can also find a good write-up of this pattern in Domain Driven Design.
Repository: as easy as 1-2-3Il Repository occorre per persistere un Domain ModelLa «Bibbia» del Domain Model è [DDD]E vediamolo, ‘sto DDD 
DDD Architecture
DDD KeyConcepts (redux)Il Domain Layer contiene la domain logic ed è composto daModel: Entità (identità e stato) e Valori (solo stato)ServiziEntità 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 atomicamenteLe istanze di entità/aggregate sono costruite da Factory(pattern Builder [GoF])
Da 0 ad AggregateE' un insieme di elementi raggruppati in un’unità logica, quindi un grafo di oggettiHa come radice l'entità principale dell'aggregatoLa radice è l’unico elemento che può essere referenziato fuori dai confini dell’aggregatoNon è possibile agire direttamente sugli elementi senza passare dalla radice dell'aggregatoL’aggregate ha la responsabilità di implementare la propria logica
Domain Model
Repository pattern (Reloaded)Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.Ricapitolando:Interfaccia “collection like”
Gestisce la persistenzadegli Aggregate
LINQ! (siamodeibuongustai)IRepository<T>
Repository++Quisquilie IT:Code ContractsRepository <3 IoC
Demo code: NSKProgetto open source (licenza CPL) disponibile su CodePlex: http://nsk.codeplex.com
Bibliografia[DDD] Domain Driven Design, Eric Evans, Addison-Wesley[P of EAA] Pattern of Enterprise Application Architecture, Martin Fowler, Addison-Wesley
ContattiMail: andrea.saltarello@ugidotnet.orgTwitter: http://twitter.com/andysal74Blog: http://blogs.ugidotnet.org/papeLavoro: http://www.manageddesigns.it

More Related Content

Similar to Build a LINQ-enabled Repository (20)

PDF
MongoDB SpringFramework Meeting september 2009
Massimiliano Dessì
 
PPTX
DNM19 Sessione2 Orchard Temi e Layout (Ita)
Alessandro Giorgetti
 
PDF
Idiomatic Domain Driven Design
Andrea Saltarello
 
PPTX
Alla scoperta dei Vector Database e dei RAG
Commit University
 
PDF
MongoDb and Scala SpringFramework Meeting
guest67beeb9
 
PDF
MongoDB Scala Roma SpringFramework Meeting2009
Massimiliano Dessì
 
ODP
Many Designs Elements
Giampiero Granatella
 
PPT
Valorizzare le IDT conformi agli standard OGC® per produrre Linked Open Data ...
Planetek Italia Srl
 
PDF
Repository pattern
Christian Nastasi
 
PDF
Domain Driven Design e CQRS
Manuel Scapolan
 
PDF
Approccio Pratico al Domain Driven Design
Luca Milan
 
PPTX
Community Tour 2009 Windows Azure Overview
Fabio Cozzolino
 
PPTX
DNM19 Sessione1 Orchard Primo Impatto (ita)
Alessandro Giorgetti
 
PDF
Repository pattern slides v1.1
Christian Nastasi
 
PDF
ALIADA
@CULT Srl
 
PDF
Components
CarlottaDimatteo
 
PPTX
Corso sharepoint D2
Decatec
 
PPT
Oracle 1
Sergio Ronchi
 
PPT
Slides marcosabatini
Marco Sabatini
 
PDF
Angular Components e Pipe
CarlottaDimatteo
 
MongoDB SpringFramework Meeting september 2009
Massimiliano Dessì
 
DNM19 Sessione2 Orchard Temi e Layout (Ita)
Alessandro Giorgetti
 
Idiomatic Domain Driven Design
Andrea Saltarello
 
Alla scoperta dei Vector Database e dei RAG
Commit University
 
MongoDb and Scala SpringFramework Meeting
guest67beeb9
 
MongoDB Scala Roma SpringFramework Meeting2009
Massimiliano Dessì
 
Many Designs Elements
Giampiero Granatella
 
Valorizzare le IDT conformi agli standard OGC® per produrre Linked Open Data ...
Planetek Italia Srl
 
Repository pattern
Christian Nastasi
 
Domain Driven Design e CQRS
Manuel Scapolan
 
Approccio Pratico al Domain Driven Design
Luca Milan
 
Community Tour 2009 Windows Azure Overview
Fabio Cozzolino
 
DNM19 Sessione1 Orchard Primo Impatto (ita)
Alessandro Giorgetti
 
Repository pattern slides v1.1
Christian Nastasi
 
ALIADA
@CULT Srl
 
Components
CarlottaDimatteo
 
Corso sharepoint D2
Decatec
 
Oracle 1
Sergio Ronchi
 
Slides marcosabatini
Marco Sabatini
 
Angular Components e Pipe
CarlottaDimatteo
 

More from Andrea Saltarello (8)

PPTX
Da Rotor a .NET Core ed indietro: Microsoft &lt;3 Open Source
Andrea Saltarello
 
PDF
The Fine Art of Time Travelling: implementing Event Sourcing
Andrea Saltarello
 
PDF
ASP.NET Core essentials
Andrea Saltarello
 
PDF
Implementing Event Sourcing in .NET
Andrea Saltarello
 
PDF
Idiomatic Domain Driven Design: implementing CQRS
Andrea Saltarello
 
PDF
Architecting an ASP.NET MVC Solution
Andrea Saltarello
 
PDF
Layered Expression Trees: una terza via (idiomatica) verso il DDD
Andrea Saltarello
 
PPTX
MVC2: non solo tecnologia
Andrea Saltarello
 
Da Rotor a .NET Core ed indietro: Microsoft &lt;3 Open Source
Andrea Saltarello
 
The Fine Art of Time Travelling: implementing Event Sourcing
Andrea Saltarello
 
ASP.NET Core essentials
Andrea Saltarello
 
Implementing Event Sourcing in .NET
Andrea Saltarello
 
Idiomatic Domain Driven Design: implementing CQRS
Andrea Saltarello
 
Architecting an ASP.NET MVC Solution
Andrea Saltarello
 
Layered Expression Trees: una terza via (idiomatica) verso il DDD
Andrea Saltarello
 
MVC2: non solo tecnologia
Andrea Saltarello
 
Ad

Build a LINQ-enabled Repository

  • 1. DATA01Build a LINQ-enabledRepositoryCommunity Days - Milano, 16 e 17 dicembre 2010Andrea SaltarelloArchitect @ ManagedDesigns [email protected]://blogs.ugidotnet.org/papehttp://twitter.com/andysal74http://creativecommons.org/licenses/by-nc-nd/2.5/
  • 3. Repository pattern [P of EAA, 322]Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.
  • 4. Repository patternA 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.…You can also find a good write-up of this pattern in Domain Driven Design.
  • 5. Repository: as easy as 1-2-3Il Repository occorre per persistere un Domain ModelLa «Bibbia» del Domain Model è [DDD]E vediamolo, ‘sto DDD 
  • 7. DDD KeyConcepts (redux)Il Domain Layer contiene la domain logic ed è composto daModel: Entità (identità e stato) e Valori (solo stato)ServiziEntità 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 atomicamenteLe istanze di entità/aggregate sono costruite da Factory(pattern Builder [GoF])
  • 8. Da 0 ad AggregateE' un insieme di elementi raggruppati in un’unità logica, quindi un grafo di oggettiHa come radice l'entità principale dell'aggregatoLa radice è l’unico elemento che può essere referenziato fuori dai confini dell’aggregatoNon è possibile agire direttamente sugli elementi senza passare dalla radice dell'aggregatoL’aggregate ha la responsabilità di implementare la propria logica
  • 10. Repository pattern (Reloaded)Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.Ricapitolando:Interfaccia “collection like”
  • 14. Demo code: NSKProgetto open source (licenza CPL) disponibile su CodePlex: http://nsk.codeplex.com
  • 15. Bibliografia[DDD] Domain Driven Design, Eric Evans, Addison-Wesley[P of EAA] Pattern of Enterprise Application Architecture, Martin Fowler, Addison-Wesley
  • 16. ContattiMail: [email protected]: http://twitter.com/andysal74Blog: http://blogs.ugidotnet.org/papeLavoro: http://www.manageddesigns.it
  • 17. Slides e materialeNei prossimi giorni suhttp://www.communitydays.it/