仓储模式和Asp.net提供程序模型是相同的吗?

11
自从Asp.net 2.0以来,就有了提供程序模式。在实现细节上,提供程序是ProviderBase类的派生类,而不是接口,但无论如何,提供程序模式存在的目的是为了让我们通过编辑web.config文件来使用不同的实现。例如,如果您创建了一个博客应用程序,您可以拥有一个BlogProvider:ProviderBase,然后您可以有SqlBlogProvider、OracleBlogProvider甚至是MockBlogProvider来进行测试等各种不同的BlogProvider实现。
现在,存储库模式变得越来越流行,我认为它是为了满足同样的需求,尽管在实现细节上,通常使用接口,如IBlogProvider,并且您会通过构造函数而不是属性注入不同的实现,但本质上我并没有看到这两个模式给我们带来的差异。
个人而言,我觉得提供程序模式在实现上更自然。那么它们之间有区别还是只是由不同社区赋予不同名称的相同事物?
对此,我非常感激任何评论。 谢谢, Ray。

下面接受的答案有一个类似的解释,可以参考:http://forums.asp.net/t/1649824.aspx?Provider+Model+vs+Repository+Pattern - Ray
2个回答

16

仓储库模式(Repository)和提供者模式(Provider)有些重叠,但它们并没有正式描述相同的事情。我几乎可以说仓储库模式是提供者模式的子集。实际上,我认为仓储库模式起源于特定的需求-抽象化存储库-并在社区中发展成更通用的抽象模式。在这方面,它们已经成为描述同一概念的不同术语。然而,从最初的定义来看,它们的范围是不同的:

  • 仓储库模式的目的是将数据仓储的具体细节与应用程序分离。

  • 提供者模式的目的是将任何具体细节与应用程序分离。这可能是一个数据仓储,但同样经常是某种逻辑。

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


也值得一提的是,将存储库注入到提供程序中非常有用。这样,您就具有了使用不同提供程序策略的灵活性,并且还不会将提供程序与特定存储库绑定在一起的附加优势。我通常同时使用存储库和提供程序,这种情况在十次中有九次出现。 - EightyOne Unite

1
我不同意Rex M.的观点。提供者模式的目的是通过抽象接口提供支持以进行定制,而存储库模式的目的是提供支持以抽象化底层数据库的细节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接