我正在实现存储库模式。我这样做的主要原因:
- 将客户端代码从持久性细节中抽象出来(实体框架)
- 支持可测试性
通用存储库与否?
我遇到的问题是我是否应该有一个通用存储库。一种IQueryable<T> Query()
方法将为调用代码提供构造特定查询的方法。这里的问题是这是泄漏的抽象——实体框架的细节现在正在泄漏到我的客户端代码中。
这将如何影响单元测试? 我还能
ICustomerRepository
用这个实现来模拟吗?这种效果会如何替换我的持久层?像 Azure 存储表或 NHibernate。
否则我将不得不在 上实现非常具体的查询方法ICustomerRepository
,例如GetIsActiveByFirstName()
和GetIsActiveByDistrict()
。我非常不喜欢这种方式,因为我的存储库类将挤满不同的查询方法。这个系统有数百个模型,因此可能有数百甚至数千个这样的方法来编写和维护。