2011-01-27 46 views
0

我正在更改企业会计应用程序的体系结构。我打算使用IRepositoy <TDataModel>模式,但有一点区别。我将为来自基础IRepository <TDataModel>的每个实体创建一个接口。例如,如果我的实体是客户,产品和订单,然后我将不得不知识库<T>和存储库每个实体

IClientRepository:IRepository <ClientModel>
IProductRepository:IRepository <产品型号>
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(顺便说一句, ?)

我看了一些入库样本,但找不到任何使用这种组合的东西。我想知道有没有什么好做的?它是否正确?其他优点和缺点是什么?

在此先感谢

+0

为什么你需要更新的方法?您是使用自定义构建数据访问层还是依赖其中一个ORM? – 2011-01-27 14:00:59

+0

是的,我使用NHibernate,但在其他项目中我也有更新方法,是不是错误? – sos00 2011-01-27 14:37:57

回答

0

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

例如,系统是否需要“代表创建”的能力(在这种情况下创建者和创建日期不会等于当前用户和当前时间)?如果从备份中恢复数据不保留原始值,会不会破坏?对于创建日期是客户的时间,服务器日期时间还是数据库日期时间,这一点很重要吗?

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