Zac*_*ott 1 c# repository-pattern
我是知识库的新手.我刚刚阅读了有关实现谓词和工作单元(Fowler)的内容.我见过存储库接口,如下所示:
public interface IRepository<ET> {
ET Add( ET entity);
ET Remove( int id);
ET Get( int id);
IList<ET> Get(Expression<Func<T, bool>> predicate);
}
Run Code Online (Sandbox Code Playgroud)
当然,工作单元会将数据上下文(Microsoft粉丝)注入新的存储库,其中工作单元将具有.Save()方法,在所有数据上下文中调用Save.
没有Edit方法,所以我假设您可以修改从存储库中弹出的任何实体,然后在工作单元上调用保存更改.
它是否正确?漏?我错过了什么?OrderBy的方法是否不必存在于存储库中?Paging(.Skip().Take())应该以某种方式在谓词中实现吗?
链接到示例代码将是非常棒的,尤其是如何在存储库中实现谓词.
如果您指的是实体框架,我建议您阅读:http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-与实体框架,4-0.aspx
更新:
我不是存储库模式的专家,但我现在在我的项目中使用它.部分表单性能,以下是我从这种设计模式中发现的好处:
1,简化所有实体的CRUD操作实现.有一个界面:
public interface IDataRepository<T> where T : class
Run Code Online (Sandbox Code Playgroud)
那么你将能够非常容易和快速地复制其他人
public class EntityOneRepository : IDataRepository<EntityOne>
public class EntityTwoRepository : IDataRepository<EntityTwo>
Run Code Online (Sandbox Code Playgroud)
2,保持我的代码干燥.一些实体可能有自己的数据操作方法.(即存储过程)您可以轻松扩展它而无需触及其他存储库.
public interface IDonationRepository : IDataRepository<Donation>
{
//method one
//method two
//....
}
Run Code Online (Sandbox Code Playgroud)
对于Paging,它可以通过Skip()和take()完成,也可以在数据库中定义自己的SP,然后通过EF4调用它.在这种情况下,您也将受益于数据库sp缓存.
有一段时间,保持代码清洁和逻辑可读对于更好的应用程序结构也很重要.
归档时间: |
|
查看次数: |
3097 次 |
最近记录: |