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

Contenu connexe

Tendances

Tendances (10)

Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
 
Ch09 整合資料庫
Ch09 整合資料庫 Ch09 整合資料庫
Ch09 整合資料庫
 
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
 
9. meta-programming
9. meta-programming9. meta-programming
9. meta-programming
 
整合資料庫
整合資料庫整合資料庫
整合資料庫
 

En vedette

A clean repository pattern in ef
A clean repository pattern in efA clean repository pattern in ef
A clean repository pattern in ef
jaxarcsig
 
Real World Dependency Injection - phpday
Real World Dependency Injection - phpdayReal World Dependency Injection - phpday
Real World Dependency Injection - phpday
Stephan Hochdörfer
 

En vedette (20)

Repository and Unit Of Work Design Patterns
Repository and Unit Of Work Design PatternsRepository and Unit Of Work Design Patterns
Repository and Unit Of Work Design Patterns
 
Generic repository pattern with ASP.NET MVC and Entity Framework
Generic repository pattern with ASP.NET MVC and Entity FrameworkGeneric repository pattern with ASP.NET MVC and Entity Framework
Generic repository pattern with ASP.NET MVC and Entity Framework
 
Repository design pattern in laravel - Samir Poudel
Repository design pattern in laravel - Samir PoudelRepository design pattern in laravel - Samir Poudel
Repository design pattern in laravel - Samir Poudel
 
Save Repository From Save
Save Repository From SaveSave Repository From Save
Save Repository From Save
 
Dapper performance
Dapper performanceDapper performance
Dapper performance
 
Dependency injection in asp.net core
Dependency injection in asp.net coreDependency injection in asp.net core
Dependency injection in asp.net core
 
Laravel 5 In Depth
Laravel 5 In DepthLaravel 5 In Depth
Laravel 5 In Depth
 
A clean repository pattern in ef
A clean repository pattern in efA clean repository pattern in ef
A clean repository pattern in ef
 
Enterprise Level Application Architecture with Web APIs using Entity Framewor...
Enterprise Level Application Architecture with Web APIs using Entity Framewor...Enterprise Level Application Architecture with Web APIs using Entity Framewor...
Enterprise Level Application Architecture with Web APIs using Entity Framewor...
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
Real World Dependency Injection - phpday
Real World Dependency Injection - phpdayReal World Dependency Injection - phpday
Real World Dependency Injection - phpday
 
EF6 or EF Core? How Do I Choose?
EF6 or EF Core? How Do I Choose?EF6 or EF Core? How Do I Choose?
EF6 or EF Core? How Do I Choose?
 
A Tour of EF Core's (1.1) Most Interesting & Important Features
A Tour of EF Core's (1.1) Most Interesting & Important FeaturesA Tour of EF Core's (1.1) Most Interesting & Important Features
A Tour of EF Core's (1.1) Most Interesting & Important Features
 
ASP.NET MVC 4 Request Pipeline Internals
ASP.NET MVC 4 Request Pipeline InternalsASP.NET MVC 4 Request Pipeline Internals
ASP.NET MVC 4 Request Pipeline Internals
 
Difference between wcf and asp.net web api
Difference between wcf and asp.net web apiDifference between wcf and asp.net web api
Difference between wcf and asp.net web api
 
Generic Repository Pattern with ASP.NET MVC and EF
Generic Repository Pattern with ASP.NET MVC and EFGeneric Repository Pattern with ASP.NET MVC and EF
Generic Repository Pattern with ASP.NET MVC and EF
 
ASP.NET MVC 4 - Routing Internals
ASP.NET MVC 4 - Routing InternalsASP.NET MVC 4 - Routing Internals
ASP.NET MVC 4 - Routing Internals
 
C# 6.0 - DotNetNotts
C# 6.0 - DotNetNottsC# 6.0 - DotNetNotts
C# 6.0 - DotNetNotts
 
Day02 01 Advance Feature in C# DH TDT
Day02 01 Advance Feature in C# DH TDTDay02 01 Advance Feature in C# DH TDT
Day02 01 Advance Feature in C# DH TDT
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
 

Similaire à Introduction the Repository Pattern

Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
wangjiaz
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
appollo0312
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
evercislide
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
zhoujg
 
Php设计模式介绍
Php设计模式介绍Php设计模式介绍
Php设计模式介绍
cyf5513
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用
yiditushe
 

Similaire à Introduction the Repository Pattern (20)

Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
 
twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構
 
Hibernate教程
Hibernate教程Hibernate教程
Hibernate教程
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
Php设计模式介绍
Php设计模式介绍Php设计模式介绍
Php设计模式介绍
 
Kid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese VersionKid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese Version
 
Les3
Les3Les3
Les3
 
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - LuceneJava 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練22016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
 
资源整合与Web2.0
资源整合与Web2.0资源整合与Web2.0
资源整合与Web2.0
 
Kevenjiaoda
KevenjiaodaKevenjiaoda
Kevenjiaoda
 
资源整合与Web2.0
资源整合与Web2.0资源整合与Web2.0
资源整合与Web2.0
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用
 
陽明大學/FHIR 快速跳坑指南
陽明大學/FHIR 快速跳坑指南陽明大學/FHIR 快速跳坑指南
陽明大學/FHIR 快速跳坑指南
 
Les 3 ppt
Les 3 pptLes 3 ppt
Les 3 ppt
 

Introduction the Repository Pattern