首先使用EF4代码创建存储库类的最佳实践是什么?

时间:2011-01-22 19:10:58

标签: c# model-view-controller asp.net-mvc-2 design-patterns

似乎有很多方法可以应用存储库模式,这就是为什么我需要你的意见,以及对应用存储库模式的最佳方式的明确答案。它是通用存储库?但是存在一些问题,其中一些域对象不具有与其他域对象相同的行为。它是指定存储库?存储库之间的代码重复怎么样?它既是组合?如何使用di容器进行这两种实现?

由于

编辑:我正在使用的orm是实体框架4.很高兴有一个EF4的例子。

2 个答案:

答案 0 :(得分:3)

Repository模式本身在那些需要规范的领域非常明确。其余部分是故意遗漏的,因为它取决于我的外部因素,例如您的编程语言,项目范围和您的个人编程风格。

换句话说:您似乎在询问如何应用模式的模式,但最终您将不得不在编程时做出自己的决定。

我会尝试回答您更具体的问题:

  • 是的,使用Generics对于存储库来说是一个好主意。另一种方法是为应存储的所有对象建立一个公共接口。根据您的要求,您也可以同时使用这两种方法。
  • 尝试通过在要存储的对象上调用多态方法来处理对象行为的差异。
  • 如果你正确地做(通过使用泛型和/或接口),应该没有代码重复。

答案 1 :(得分:1)

This post by Gabriel Schenker是对存储库模式的一个很好的解释。他用NHibernate实现它(你没有说你正在使用哪个ORM)并提供了一个通用的基础库。对我来说,存储库模式与测试非常相关,能够伪造或模拟它,这篇博文也展示了如何制作自己的假货。

根据我的经验,大多数存储库都有一些共同的功能,例如: GetById,添加,删除。因此,拥有一个可以继承的基类是很有用的。当你开始考虑动态Linq查询以及如何测试它们时,它会变得有点棘手。

可以找到Linq的存储库模式示例herehere但我会开始简单,因为这些对于某些项目来说可能有点过分。