存储库模式的替代方案?

Posted

技术标签:

【中文标题】存储库模式的替代方案?【英文标题】:Alternatives to the repository pattern? 【发布时间】:2011-06-26 04:47:22 【问题描述】:

人们对我大喊大叫,我应该始终使用存储库模式,我已经这样做了很长一段时间......现在我想知道是否有任何合适的替代方案模式?

【问题讨论】:

有趣。你问是出于好奇还是因为不满意?如果是后者,为什么? @anon - 好奇心 :) - 试图找出还有哪些其他替代方案,因为存储库模式似乎是使用最广泛(并且几乎也是唯一一个)使用的模式。 【参考方案1】:

有数据访问对象模式,但它通常位于存储库的顶部,用于包装复杂的查询,因此它们可以简单地作为单个方法调用。

Repository 为您的数据库提供了一个标准接口,而 DAO 公开了标准查询,这就是为什么两者结合得这么好; DAO 将特定调用转发到存储库。当然,您当然可以选择不在您的 DAO 中使用存储库。您可以打开与数据库的连接并直接运行查询,或者使用表数据网关,但我认为大多数人喜欢 Repository 的原因是因为它比这两个选项更干净,尽管他们不应该大喊大叫你:)

http://en.wikipedia.org/wiki/Data_access_object

在计算机软件中,数据访问 对象 (DAO) 是一个对象 提供了一些抽象接口 数据库类型或持久性 机制,提供一些具体的 操作不暴露细节 数据库。它提供了一个映射 从应用程序调用到 持久层。这种隔离 分离什么数据的关注点 访问应用程序的需要,在 领域特定对象的术语和 数据类型(的公共接口 DAO),以及这些需求是如何实现的 对特定的 DBMS 感到满意, 数据库模式等( DAO 的实施)。这 设计模式同样适用 对于大多数编程语言,大多数 具有持久性的软件类型 需要和大多数类型的数据库,但是 它传统上与 Java EE 应用程序和 关系数据库通过 JDBC API 因为它起源于 Sun 微系统的最佳实践 指南[1](“核心 J2EE 模式”) 对于那个平台。

【讨论】:

感谢您的回答 :) - 正如您所说,DAO 位于存储库的“顶部”,因此与存储库非常相似。您知道仅使用 DAO 而不是存储库的好处吗? 在我编辑的答案中至少有两个其他选项,但我想说 Repository 是迄今为止最干净的,特别是如果您使用 C# 并且可以访问提供可爱的延迟执行 IQueryable 集合类型。 “DOA ... 通常位于存储库之上”与我目前所读到的内容背道而驰。它是“某种类型的数据库或持久性机制的抽象接口”。存储库不是持久性的(直接)抽象。见difference between DAO and Repository。还有一个比较列表:Repository vs DAO

以上是关于存储库模式的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

5 月 1 日之后,我们将如何处理 jcenter() 存储库以及它的替代方案是啥?

存储信用卡,替代使用信用卡保险库

使用 Redshift 作为 Spring 批处理作业存储库和 Redshift 中 SEQUENCE 的替代品

在使用 ASP.NET MVC 和 ORM 解决方案时,我们是不是需要使用存储库模式?

非公共工件的 Maven 存储库托管? [关闭]

应用程序设置管理器的单例模式的替代方案