我看了几乎所有关于Repository模式和它的不同实现的文章。 他们中的许多判断不良做法(例如:使用IQueryable<T>
而不是IList<T>
等就是为什么我仍然停留,无法最终达到正确的。
所以:
我需要库模式在我的MVVM应用程序,申请的IoC?
如果是,什么是有效的IRepository实施EF实体这是一个很好的做法,更好的可测试?
如何测试我的库和的UnitOfWork行为? 单元测试对内存库? 集成测试?
编辑 :根据答案我添加的第一个问题。
我看了几乎所有关于Repository模式和它的不同实现的文章。 他们中的许多判断不良做法(例如:使用IQueryable<T>
而不是IList<T>
等就是为什么我仍然停留,无法最终达到正确的。
所以:
我需要库模式在我的MVVM应用程序,申请的IoC?
如果是,什么是有效的IRepository实施EF实体这是一个很好的做法,更好的可测试?
如何测试我的库和的UnitOfWork行为? 单元测试对内存库? 集成测试?
编辑 :根据答案我添加的第一个问题。
Ayende Rahien有很多关于库帖子http://ayende.com/blog/search?q=repository ,当你使用ORM就是为什么它是坏的。 我认为库是要走的路。 也许是因为,在2004年不是现在。 ORM的已经实现了仓库。 在EF的情况下,它是IDbSet。 和的DbContext是的UnitOfWork。 创建一个存储库来包装EF或其他ORM的增加了很多不必要的复杂性。
这样做的代码将与数据库交互的集成测试。
Repository模式,当您使用EF,所以你应该确保你需要间接的这种额外的水平增加了一个额外层。
Repository模式的本意是为了保护上述从复杂并了解数据库的结构中的层。 在许多方面,英孚的ORM模型保护从物理实现的代码在数据库中,因此需要对储存较少。
有两个基本的选择:
对于测试:
我们采用两种方法,Repository模式给出了更层次分明的应用程序,因此,也许更多的控制,使用EF直接给出用更少的代码,因此加快构建的应用程序。