【发布时间】:2013-12-11 19:18:35
【问题描述】:
我正在实施存储库模式。我这样做的主要原因:
- 将客户端代码从持久性细节中抽象出来(实体框架)
- 支持可测试性
是否有通用存储库?
我遇到的问题是我是否应该有一个通用存储库。 IQueryable<T> Query() 方法将为调用代码提供构造特定查询的方法。这里的问题是这是泄漏抽象 - 实体框架细节现在泄漏到我的客户端代码中。
这将如何影响单元测试?我是否仍然能够使用此实现模拟
ICustomerRepository?替换我的持久层会产生什么影响? 就像 Azure 存储表或 NHibernate。
否则我将不得不在ICustomerRepository 上实现非常具体的查询方法,例如GetIsActiveByFirstName() 和GetIsActiveByDistrict()。我非常不喜欢这个,因为我的存储库类将挤满不同的查询方法。这个系统有数百个模型,因此可能有数百甚至数千个这样的方法需要编写和维护。
【问题讨论】:
-
感谢您的链接,但我仍然对测试有点不清楚。为什么我不能用 IQueryable 模拟?
-
您可以使用 IQueryable 模拟/起订量。 msdn.microsoft.com/en-us/data/dn314429 ... Gert 链接的点有链接,除非您对如何声明 IREPOSITORY
非常了解,并且最终可能会泄露 EF 细节。模拟 EF 并不简单,但是您应该声明 IRrespository 的域/核心层应该没有对 EF 的引用。 -
哦,我还写了this关于嘲笑。我没办法……
标签: entity-framework entity-framework-5 repository-pattern onion-architecture leaky-abstraction