存储库模式:每个实体的一个存储库类?

Der*_*ker 26 linq asp.net-mvc repository-pattern linq-to-sql

假设您在LINQ类中定义了以下实体:

Product
Customer
Category
Run Code Online (Sandbox Code Playgroud)

我应该为所有人拥有一个存储库类:

StoreRepository
Run Code Online (Sandbox Code Playgroud)

......或者我应该:

ProductRepository
CustomerRepository
CategoryRepository
Run Code Online (Sandbox Code Playgroud)

每个人的利弊是什么?就我而言,我的解决方案中有几个"应用程序"...... Store应用程序只是其中之一.

zow*_*ens 19

这是我的观点.我是Repository模式的严格追随者.应该有3种方法采用单个实体.添加,更新,删除,一般定义.

public interface IRepository<T>
{
     void Add(T entity);
     void Update(T entity);
     void Delete(T entity);
}
Run Code Online (Sandbox Code Playgroud)

除了这些方法之外,您还在处理"查询"或服务方法.如果我是你,我会按照上面的流程定义存储库,添加一个"QueryProvider",如下所示,并将您的业务逻辑放在 "服务"或"命令/查询"中(来自CQRS,Google)它).

public interface IQueryProvider<T>
{
     TResult Query<TResult>(Func<IQueryable<T>, TResult> query);
}
Run Code Online (Sandbox Code Playgroud)

(希望我的意见有点有用:))


Joh*_*ell 5

这一切都取决于你将如何"领域驱动设计".你知道聚合根是什么吗?大多数情况下,一般打字可以做你所有的基本CRUD就足够了.它只有当你开始拥有带有上下文和边界的厚模型时才开始变得重要.

  • 哇,哇,哇,慢下来.因此,如果您在没有完全理解DDD的情况下尝试实施DDD,您将变得非常沮丧并且您的质量将受到影响.现在保持简单,只需为每个实体实现一个存储库. (3认同)