Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction the Repository Pattern

1,101 views

Published on

ASP.NET MVC with Repository Pattern

Published in: Software
  • Be the first to comment

Introduction the Repository Pattern

  1. 1. 2015/09/11 Repository Pattern
  2. 2. 3-tier Architecture 1 Database Entity Framework Business Service Controller Data Access Layer Service Layer Presentation Layer
  3. 3. 2 如果程式已完成 90% 時,高層忽 然下令不准用 Entity Framework, 要改用 Nhibernate。 (上線時間不變) Challenge
  4. 4. 3 • 爆肝加班 • 落人幫忙 • 擺爛 • 離職 Solution
  5. 5. Repository Pattern 4 圖片來源:Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application
  6. 6. Definition 5 Martin Fowler 定義:Repository 是領域層與資料對應層之間 的媒介,如同存在記憶體中的物件集合。用戶端會建構查詢規 格(query specification),並傳遞給 Repository 以執行特定 的資料操作.....概念上,Repository 將資料與其相關操作封裝 成物件集合,以便用貼近物件導向的方式來存取資料。 Martin Fowler,軟體工程師,也是一個軟體開 發方面的著作者和國際知名演說家,專注於物 件導向分析與設計,統一建模語言,領域建模, 以及敏捷軟體開發方法,包括極限編程。
  7. 7. Definition 6 將 DAL 以 Repository 封裝,外部 透過 Repository 來取資料,無須 理會資料來源的種類。
  8. 8. SQL Server 程式架構 7 Controllers Presentation Layer Views View Models Domain Model EF DbContext EF DbSet<T> Entity Framework HTML JavaScript AJAX User Interface Repositories Biz Entities EF Entities Business Service Business Layer Business Utilities / Helpers Web API Comm on Utilities
  9. 9. 定義 Repository 的 interface 8
  10. 10. 實作 Repository interface 9
  11. 11. 實作 Repository interface 10
  12. 12. 使用 Repository 11
  13. 13. 使用 Repository 12
  14. 14. 13 使用 Repository
  15. 15. 14 抽換 Repository
  16. 16. 使用 Repository 的理由 15 • 利於單元測試 • 避免上層服務直接依賴 Entity Framework,以 便抽換成其他 DAL 技術 • 可搭配 Unit of Works 來進行交易(Transaction)
  17. 17. 不使用 Repository 的理由 16 • 利於單元測試 − 沒有 Repository 還是可以做 unit test,對象 改為商業邏輯層(前提是要具備 N-tier 架構) • 避免上層服務直接依賴 Entity Framework,以 便抽換成其他 DAL 技術 − 實務上更換 DAL、DB 的機會不大 • 可搭配 Unit of Works 來進行交易(Transaction) − Entity Framework 已提供類似功能

×