Code Contracts and Generics:                   implementing a LINQ-enabled                           Repository        And...
SponsorSponsor Platinum Sponsor Gold
Agenda•   Chi•   Quisquilie IT•   Perché•   Come•   Q&A
Repository pattern [P of EAA, 322]Mediates between the domain and data mapping layersusing a collection-like interface for...
Code Contracts: OverViewI “Software Contract” sono specifiche formali del   comportamento di una unità di codice espresse ...
VS2010 vs. Code ContractsIl FX 4.0 include il supporto ai Code   Contracts ma occorre «abilitarlo»   installando:• il Code...
Code Contracts
Repository patternA system with a complex domain model often benefitsfrom a layer, such as the one provided by Data Mapper...
Repository: as easy as 1-2-31. Il Repository occorre per persistere   un Domain Model2. La «Bibbia» del Domain Model è   [...
DDD Architecture
DDD Key Concepts (redux)• Il Domain Layer contiene la domain logic ed  è composto da   – Model: Entità (identità e stato) ...
Da 0 ad Aggregate• E un insieme di elementi raggruppati in un‟unità  logica, quindi un grafo di oggetti• Ha come radice le...
Domain Model
Repository pattern (Reloaded)Mediates between the domain and data mapping layersusing a collection-like interface for acce...
IRepository<T>
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 Architect...
Code Contracts and Generics: implementing a LINQ-enabled Repository
Upcoming SlideShare
Loading in...5
×

Code Contracts and Generics: implementing a LINQ-enabled Repository

1,281

Published on

In questa sessione vedremo come implementare il Repository pattern in modo da creare un Data Access Layer interrogabile mediante query LINQ, delegando l'effettiva esecuzione delle stesse ad O/RM quali Entity Framework e/o NHibernate.

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,281
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Code Contracts and Generics: implementing a LINQ-enabled Repository

  1. 1. Code Contracts and Generics: implementing a LINQ-enabled Repository Andrea Saltarello C.T.O. http://blogs.ugidotnet.org/pape http://twitter.com/andysal74 Managed Designs s.r.l.http://creativecommons.org/licenses/by-nc-nd/2.5/
  2. 2. SponsorSponsor Platinum Sponsor Gold
  3. 3. Agenda• Chi• Quisquilie IT• Perché• Come• Q&A
  4. 4. Repository pattern [P of EAA, 322]Mediates between the domain and data mapping layersusing a collection-like interface for accessing domainobjects.
  5. 5. Code Contracts: OverViewI “Software Contract” sono specifiche formali del comportamento di una unità di codice espresse mediante l‟uso di 3 elementi:• Espressioni invarianti, che sono vere sia prima sia dopo l‟invocazione della funzione• Precondizioni, che esprimono le condizioni nelle quali una funzione può essere invocata• Postcondizioni, che esprimono il funzionamento delle funzioniNota: è possibile verificare questi elementi mediante l‟uso di asserzioni, che implementeremo mediante unit testing
  6. 6. VS2010 vs. Code ContractsIl FX 4.0 include il supporto ai Code Contracts ma occorre «abilitarlo» installando:• il Code Contract toolkit per VS2010 (d/l da sito Microsoft Research)• [Opzionale] le estensioni Code Contract per VS2010
  7. 7. Code Contracts
  8. 8. Repository patternA system with a complex domain model often benefitsfrom a layer, such as the one provided by Data Mapper(165), that isolates domain objects from details of thedatabase access code. In such systems it can be worthwhileto build another layer of abstraction over the mappinglayer where query construction code is concentrated. Thisbecomes more important when there are a large numberof domain classes or heavy querying. In these casesparticularly, adding this layer helps minimize duplicatequery logic.…You can also find a good write-up of this pattern inDomain Driven Design.
  9. 9. Repository: as easy as 1-2-31. Il Repository occorre per persistere un Domain Model2. La «Bibbia» del Domain Model è [DDD]3. E vediamolo, „sto DDD 
  10. 10. DDD Architecture
  11. 11. DDD Key Concepts (redux)• Il Domain Layer contiene la domain logic ed è composto da – Model: Entità (identità e stato) e Valori (solo stato) – Servizi• 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• Le istanze di entità/aggregate sono costruite da Factory (pattern Builder [GoF])
  12. 12. 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
  13. 13. Domain Model
  14. 14. Repository pattern (Reloaded)Mediates between the domain and data mapping layersusing a collection-like interface for accessing domainobjects.Ricapitolando:• Interfaccia “collection like”• Gestisce la persistenza degli Aggregate• LINQ! (siamo dei buongustai )
  15. 15. IRepository<T>
  16. 16. Demo code: NSKProgetto open source (licenza CPL)disponibile su CodePlex:http://nsk.codeplex.com
  17. 17. Bibliografia[DDD] Domain Driven Design, Eric Evans, Addison-Wesley[P of EAA] Pattern of Enterprise Application Architecture, Martin Fowler, Addison-Wesley
  1. A particular slide catching your eye?

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

×