Moo*_*Moo 17 c# design-patterns repository-pattern
我正在考虑实现存储库模式(因为我提出的是90%的实现),并且遇到了一个设计问题 - 我有两个或更多核心业务对象(例如,业务和联系人)一个CRM应用程序),BO可以强烈相关或根本不相关.
在这种情况下,我应该实现一个存储库(例如CrmRepository,.addBusiness(),.addContact()等),还是多个存储库(BusinessRepository,ContactRepository,每个存储库都有自己的.add(),. delete()等等).
在这种情况下,最佳做法是什么?
底层DAL是EF4.
问候
武
Mar*_*man 23
我们最近在工作中做了很多思考,并且发现了一些文章,帮助我们以一致的方式可视化和设计我们的存储库.
从我们发现的一个更好的做法是每个聚合根创建一个存储库.聚合根将是一个实体类型,您需要引用该实体类型以达到子值类型.只能从数据库中查询实体类型,并且需要从实体遍历任何子值类型.
根据您的问题中的信息,似乎业务将是聚合根,因此是实体类型,并且需要其自己的存储库.由于Contact可以独立生活,也可以是聚合根.两个对象都可以相互引用,并使用存储库从联系人加载企业或通过其各自的存储库从企业加载联系人.
我最近一直在做很多阅读,所以我希望我在思考过程中有所了解.
一些链接
我完全同意马克的观点,但要多补充一点.在您了解创建通用存储库的好处时,常见的模式是IRepository和Repository.有一件事我发现更有用,由杰里米·D·米勒(无法找到参考文献)揭示的是在方法层面上有泛型.
所以我的IReposity会有这样的方法:
T FindByKey<T>(int key);
IEnumerable<T> FindAll();
T FindBy<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression);
void Update<T>(entity);
Run Code Online (Sandbox Code Playgroud)
然后,根据您的理念,您可以传递Repository类并直接查询它,或者使您的Repository实现抽象并强制它的使用由显式存储库封装,如下所示:
CrmRepository : Repository
{
FindByCustomerId(int customerId)
{ return FindByKey<Customer>(customerId);}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7458 次 |
| 最近记录: |