【问题标题】:Is the Repository Pattern the same as the Asp.net Provider Model?存储库模式是否与 Asp.net 提供程序模型相同?
【发布时间】:2010-10-12 00:09:27
【问题描述】:

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

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

就我个人而言,我觉得 Provider Model 在实现中对我来说更自然。那么,它们之间是否有区别,或者它们只是不同社区赋予不同名称的同一事物?

我会很感激这方面的任何 cmets, 谢谢, 雷。

【问题讨论】:

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


【解决方案1】:

Repository 和 Provider 模式重叠,但它们没有正式描述相同的东西。我几乎会说存储库是 Provider 的一个子集。在实践中,我认为 Repository 模式源于一种特定需求 - 抽象存储库 - 并在社区中演变为更通用的抽象模式。在这方面,它们已经成为描述相同概念的不同术语。但是,从最初的定义来看,它们的范围不同:

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

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

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

【讨论】:

  • 可能还值得一提的是,将存储库注入提供程序很有用。这样一来,您就可以灵活地使用不同的提供者策略,并具有不将提供者绑定到特定存储库的额外好处。 10 次中有 9 次我最终都会同时使用存储库和提供程序。
【解决方案2】:

我不能同意 Rex M。提供者模式的目的是通过抽象接口为定制提供支持,而存储库模式的目的是为抽象数据库的细节提供支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2010-10-23
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多