Repository模式
在Nopcommerce 2.8 的数据访问中使用了Repository这种模式。在百度上google了一下,发现这个模式在asp.net mvc里广泛使用着。
找了这么一段很精辟不过又看的不大懂的介绍:
它是衔接数据映射层和域之间的一个纽带,作用相当于一个在内存中的域对象集合。客户端对象把查询的一些实体进行组合,并把它 们提交给Repository。对象能够从Repository中移除或者添加,就好比这些对象在一个Collection对象上就行数据操作,同时映射 层的代码会对应的从数据库中取出相应的数据。从概念上讲,Repository是把一个数据存储区的数据给封装成对象的集合并提供了对这些集合的操作
我的理解是:
借助于泛型,封装了基本的增删改查,消灭了很多重复的代码。
比如有一个Customer表和一个Order表:
1 public class Customer{ 2 public int Id{get;set;} 3 public string Name{get;set;} 4 } 5 public class Order{ 6 public int Id{get;set;} 7 }
对应的Repository是:
1 public interface ICustomerRepository{ 2 Customer GetById(int id); 3 void AddCustomer(Customer cust); 4 void Delete(int id); 5 void Update(Customer cust); 6 void QueryAll(); 7 } 8 9 public interface IOrderRepository{ 10 Order GetById(int id); 11 void AddOrder(Order item); 12 void Delete(int id); 13 void Update(Order item); 14 void QueryAll(); 15 }
于是我们发现了重复的代码,借助于泛型,Repository模式:
public interface IRepository{ T GetById(int id); void Add(T item); //省略代码 }
NopCommerce 2.8 中也是类似的结构:
在图中,IRepository定义增删改查,EfRespository去实现他们。