11

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

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

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

我很感激对此的任何评论,谢谢,雷。

4

2 回答 2

16

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

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

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

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

于 2009-03-08T05:41:51.303 回答
1

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

于 2009-03-18T21:45:54.840 回答