存储库模式是否与Asp.net提供者模型相同?

时间:2009-03-08 05:08:49

标签: design-patterns repository-pattern provider-model

自Asp.net 2.0以来,有提供者模型。在实现细节上,提供者是从ProviderBase派生的类,它是一个抽象类而不是接口,但无论如何,Provider Model都存在,这样我们可以通过编辑web.config来实现不同的实现交换。例如,如果您创建一个博客应用程序,您可能有一个BlogProvider:ProviderBase,那么您可以使用BlogProvider的实现:SqlBlogProvider,OracleBlogProvider甚至MockBlogProvider进行测试。

现在,Repository Pattern越来越流行,我觉得它是为了满足相同的需求,虽然在实现细节中,你通常使用接口,所以IBlogProvider,你通过构造函数而不是属性注入不同的实现,但是基本上我没有看到这两种模式给我们带来的差异。

就个人而言,我觉得供应商模型在实施中对我来说更自然。那么,它们之间是否存在差异,或者它们是由不同社区给出的不同名称相同的东西?

我很感激对此有任何意见, 谢谢, 射线。

2 个答案:

答案 0 :(得分:14)

存储库和提供程序模式重叠,但它们并未正式描述相同的内容。我几乎会说Repository是Provider的子集。在实践中,我认为存储库模式承担了特定需求 - 抽象存储库 - 并在社区中演变为更通用的抽象模式。在这方面,它们已经成为描述相同概念的不同术语。但是,根据原始定义,它们的范围不同:

  • 存储库模式的目的是从应用程序中抽象出存储库数据的细节。

  • Provider模型的目的是从应用程序中抽象出任何的细节。这可能是一个数据存储库,但它常常是某种逻辑。

例如,在我们的应用程序中,我们有一个ContextFactoryProvider,它包含用于确定要使用哪个ContextFactory的不同类型的逻辑。在这种情况下没有数据存储库;它是纯粹的应用逻辑,需要随意改变; Provider模型允许我们使用Single Responsibility Principle将每种逻辑隔离到自己的类中,并轻松地交换出逻辑。

答案 1 :(得分:1)

我不同意Rex M.提供者模式的目的是通过抽象接口提供对定制的支持,其中存储库模式的目的是提供支持以抽象不当数据库的细节。