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

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

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

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

有帮助吗?

解决方案

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

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

  • Provider 模型的目的是抽象出以下细节: 任何事物 远离应用程序。这可能是一个数据存储库,但它通常也是某种逻辑。

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top