我正在改变企业会计应用程序的架构。我将使用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(BTW是否正确?)
我看到一些IRepository&lt;&gt;样品,但找不到任何使用此组合的东西。我想知道有什么好处吗?它是对的吗?还有什么其他优点和缺点?
提前致谢
答案 0 :(得分:0)
我想这取决于你对创作日期的看法。它是域的一部分吗?是否有任何域逻辑依赖于值?
例如,系统是否需要“代表创建”的能力(在这种情况下,创建者和创建日期将不等于当前用户和当前时间)?如果从备份恢复数据没有保留原始值,会有什么破坏吗?创建日期是客户端的时间,服务器日期时间还是数据库日期时间对您来说是否重要?
如果以上所有答案都是NO,那么 A)创建日期不是域的一部分,因此可以在外部设置 B)你真的需要它吗?如果是这样,那么我只猜测基础设施问题 - 缓存管理,更改通知等等。是吗?