幫助對@Repository注解的理解


 

定義(來自Martin Fowler的《企業應用架構模式》):

Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.

個人理解:Repository是一個獨立的層,介於領域層與數據映射層(數據訪問層)之間。它的存在讓領域層感覺不到數據訪問層的存在,它提供一個類似集合的接口提供給領域層進行領域對象的訪問。Repository是倉庫管理員,領域層需要什么東西只需告訴倉庫管理員,由倉庫管理員把東西拿給它,並不需要知道東西實際放在哪。

tabbycat的理解(來源):

1. Repository模式是架構模式,在設計架構時,才有參考價值;

2. Repository模式主要是封裝數據查詢和存儲邏輯;

3. Repository模式實際用途:更換、升級ORM引擎,不影響業務邏輯;

4. Repository模式能提高測試效率,單元測試時,用Mock對象代替實際的數據庫存取,可以成倍地提高測試用例運行速度。

評估:應用Repository模式所帶來的好處,遠高於實現這個模式所增加的代碼。只要項目分層,都應當使用這個模式。

關於泛型Repository接口(來源):

僅使用泛型Repository接口並不太合適,因為Repository接口是提供給Domain層的操作契約,不同的entity對於Domain來說可能有不同的操作約束。因此Repository接口還是應該單獨針對每個Eneity類來定義。

泛型的Repository<T>類仍然用來減少重復代碼,只是不能被UserRepository類直接繼承,因為這樣Delete方法將侵入User類,所以改為在UserRepository中 組合一個Repository<T>,將開放給domain可見且又能使用泛型重用的功能委托給這個Repository<T>

Repository與Dal的區別(來源):

Repository是DDD中的概念,強調Repository是受Domain驅動的,Repository中定義的功能要體現Domain的意圖和約束,而Dal更純粹的就是提供數據訪問的功能,並不嚴格受限於Business層。

使用Repository,隱含着一種意圖傾向,就是 Domain需要什么我才提供什么,不該提供的功能就不要提供,一切都是以Domain的需求為核心;而使用Dal,其意圖傾向在於我Dal層能使用的數 據庫訪問操作提供給Business層,你Business要用哪個自己選。換一個Business也可以用我這個Dal,一切是以我Dal能提供什么操 作為核心。

相關英文文章:

  Using Repository and Unit of Work patterns with Entity Framework 4.0

  Implementing Repository Pattern With Entity Framework

  Using the Entity Framework Repository and UnitOfWork Pattern in C# ASP .NET

  Revisiting the Repository and Unit of Work Patterns with Entity Framework

  Do we need to use the Repository pattern when working in ASP.NET MVC with ORM solutions?

  We have IQueryable, so why bother with a repository

  Crazy Talk: Reducing ORM Friction  

推薦代碼示例:

  Microsoft - Domain Oriented N-Layered .NET 4.0 App Sample (DDD Architecture)

相關博文:

  EntityFramework之領域驅動設計實踐(七)-模型對象的生命周期 - 倉儲

  EntityFramework之領域驅動設計實踐(八)- 倉儲的實現:基本篇


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM