0

我正在更改企业会计应用程序的架构。我将使用 IRepositoy<TDataModel> 模式,但有一点不同。我将为从基础 IRepository<TDataModel> 派生的每个实体创建一个接口。例如,如果我的实体是客户、产品和订单,那么我将拥有

IClientRepository : IRepository<ClientModel>
IProductRepository : IRepository<ProductModel>
IOrderRepository : IRepository<OrderModel>

public interface IRepository<TDataModel, TId>
{
    TDataModel Get(TId Id);
    IList<TDataModel> List();

    TDataModel Add(TDataModel Item);
    TDataModel Add(TDataModel Item, IContext executingContext);

    void Update(TDataModel Item);
    void Update(TDataModel Item, IContext executingContext);

    bool Delete(TId Id);
    bool Delete(TId Id, IContext executingContext);

    IList<TDataModel> Where
       (System.Linq.Expressions.Expression<Func<TDataModel, bool>> criteria);
}


public interface IProductRepository : IRepository<DataModel.Product, int>
{

}

使用这种方法的原因是我想在 DAL 中而不是在 BLL 中设置一些域模型的属性 - 例如设置某些实体的 CreationDate (顺便说一句,这样做是否正确?)

我看到了一些 IRepository<> 示例,但找不到任何使用这种组合的东西。我想知道这样做有什么好处吗?完全正确吗?还有什么其他优点和缺点?

提前致谢

4

1 回答 1

0

我想这取决于您如何看待创建日期。它是域的一部分吗?任何域逻辑是否依赖于该值?

例如,系统是否需要“代表创建”的能力(在这种情况下,创建者和创建日期将不等于当前用户和当前时间)?如果从备份中恢复数据没有保留原始值,会有什么问题吗?创建日期是客户端的时间时间、服务器日期时间还是数据库日期时间对您来说是否重要?

如果以上所有问题的答案是否定的,那么 A) 创建日期不是域的一部分,因此可以在外部设置 B) 你真的需要它吗?如果是这样,那么我猜测只是为了基础设施问题——缓存管理、更改通知等。对吗?

于 2011-01-30T09:40:29.187 回答