EF4与MVC3 - 我需要存储库模式吗?

时间:2011-04-29 16:38:49

标签: entity-framework asp.net-mvc-3 repository-pattern unit-of-work

我最近了解了存储库和工作单元设计模式,并认为我会在新的EF4 MVC3项目中实现它们,因为抽象通常很好。

当我将它们添加到项目中时,我想知道果汁是否值得众所周知的挤压,给出以下内容:

  • 基础数据访问机制极不可能从EF4更改。
  • 这种抽象级别将需要更多的开销/混淆项目和团队中的其他开发人员。

我看到使用Repository模式的唯一真正好处是对应用程序进行单元测试。抽象出数据存储似乎并不有用,因为我知道数据存储区不会改变,而且,EF4已经提供了一个非常好的抽象(我只是调用.AddObject(),它看起来像我在修改内存中收集,我只是调用.SaveChanges()已经提供了工作单元模式。)

我是否应该费心实施这种抽象?我觉得必须有一些我遗漏的巨大好处,但我觉得我不需要沿着这条路走下去。我愿意相信;有人可以提起诉讼吗?感谢。

2 个答案:

答案 0 :(得分:6)

我建议你reading this answer and all linked questions。存储库是非常流行的模式,它确实使您的应用程序变得干净整洁。它让您觉得您的架构是正确的,但有关EF的存储库模式的一些假设是不正确的。在我看来(在那些答案中描述):

  • 它将使更复杂的EF相关任务更难实现,或者您的存储库和UoW实现需要具有与EF的非常类似的公共接口
  • 它不会使您的代码更好地进行单元测试,因为与存储库的所有交互仍必须由集成测试覆盖。不仅我的经验证明,通过用linq-to-objects替换linq-to-entities来模拟EF代码不会测试你的代码。

答案 1 :(得分:2)

是是是:) - 首先 - 存储库模式有助于为单元测试注入依赖项。其次,它提供了一个非常清晰的视图,确切地知道哪些数据访问方法可用于获取内容而不是人们错误。直接编码EF层。下载适用于EF4的POCO模板,这样如果您碰巧将它们用作模型和/或不希望mvc应用程序中的任何EF依赖库引用(假设您的存储库工作在一个单独的项目(我推荐)。如果您正在使用所有视图模型,那么它不是一个问题,但它很好地使用“客户”对象而没有额外的方法。在我看来它更干净。