我使用以下通用接口实现了存储库模式。
public interface IRepository<T> where T : class
{
IQueryable<T> All { get; }
IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
T Find(int id);
void InsertOrUpdate(T updateObject);
void Delete(int id);
void Save();
}
然后,我创建了各个存储库,并从我的服务层调用它们。
我的数据库中有一个表,其中填充了我们的一个数据源运行的最后日期(它只包含一个记录)。我需要做的就是从数据库中获取此日期。有什么好办法呢?当然,为这个简单的只读表创建一个存储库是否有点过分?我应该在数据库中创建一个函数或存储过程以返回此日期,如果我这样做,它将如何适应存储库模式?
答案 0 :(得分:1)
你不应该继承一般IRepository<T>
接口,因为大多数这些方法都没有任何意义。
但是既然你已经声明可以使用存储过程,LINQ查询甚至esql,那么封装数据检索仍然是一个好主意。如果要更改机制或应用某些缓存该怎么办?
另外考虑一下单元测试,你的代码依赖于这个“最后日期”,所以在你的单元测试中你希望能够提供不同的日期。可模拟的存储库将是最简单的。
也许您可以将LastModificationDate
添加为ObjectContext
的功能。然后,您拥有单一访问点,在FakeObjectContext
中,您可以返回特定日期以进行测试。
答案 1 :(得分:1)
如果您可以将抽象用于存储库定义而不是接口,则可以将日期代码直接添加到抽象中,并使其由所有存储库继承。