设计模式作为解决重复出现的问题在您的应用程序,和库模式是使用最广泛的设计模式之一。它将持久化对象sans的需要知道这些对象将坚持底层数据库,即。,而不必担心数据持久性是如何发生的。这种持久性的知识。,the persistence logic, is encapsulated inside the Repository.
本质上,存储库设计模式有助于分离业务逻辑和数据访问层的应用程序与前不必有任何知识数据持久性会如何发生。
在使用存储库的设计模式中,您可以隐藏的细节如何最终数据存储或检索的数据存储。这个数据存储可以数据库、xml文件等。您可以应用这种设计模式甚至隐藏如何通过web服务公开的数据或访问一个ORM。Martin Fowler的州:“域和数据映射层之间的协调使用集合接口来访问域对象。”
存储库定义为域对象的集合,驻留在内存中。MSDN州:“使用存储库分离的逻辑检索数据并将它映射到实体模型的业务逻辑行为的模型。业务逻辑应该不可知论者的数据类型包括数据源层。例如,数据源层可以是一个数据库,一个SharePoint列表,或者一个Web服务”。
实现存储库在c#设计模式
在这一节中,我们将探讨如何程序库设计模式。在我们的存储库的实现设计模式中,参与的类型包括以下:
- IRepository接口,这个接口是所有存储库类型的基础类型
- 库类,这是通用的库类
- 一个或多个存储库实现IRepository接口的类
现在让我们深入研究一些代码。下面的类显示了如何定义一个基本实体类实体类应该从它派生而来。
公共抽象类EntityBase
{
公共Int64 Id{得到;受保护的设置;}
}
类是定义为抽象的只有一个行业例外——名为“Id”。“Id”字段是常见的所有实体你通常使用,不是吗?这是通用IRepository接口如何的样子。
公共接口IRepository < T > T: EntityBase
{
T GetById (Int64 id);
空白创建实体(T);
空白删除(T实体);
无效更新实体(T);
}
通用库类实现了IRepository接口和实现的接口。
公共类库< T >: IRepository < T > T: EntityBase
{
公共空间创建实体(T)
{
/ /写你的逻辑来持久化实体
}
公共空间删除(T实体)
{
/ /写你的逻辑来删除一个实体
}
公共T GetById(长id)
{
/ /写你的逻辑来检索一个实体的Id
把新NotImplementedException ();
}
公共空间更新(T实体)
{
/ /写你的逻辑来更新一个实体
}
}
为特定的类创建存储库
如果你想为一个特定的实体创建一个存储库,您应该创建一个类,实现了通用IRepository < T >界面。下面的代码清单显示了这是如何实现的。
公共类CustomerRepository: IRepository <客户>
{
/ /编写代码来实现每个IRepository接口的方法。
}
同样的,如果你要创建一个ProductRepository,您应该首先创建一个实体类扩展了EntityBase类的产品。
公共类产品:EntityBase
{
公共字符串ProductName{得到;设置;}
公共字符串类{得到;设置;}
}
ProductRepository类应该实现的通用IRepository < T >界面。ProductRepository类的样子。
公共类ProductRepository: IRepository <产品>
{
/ /编写代码来实现每个IRepository接口的方法。
}