design-patterns - Active Record 和表数据网关的区别

标签 design-patterns activerecord

事件记录模式和表数据网关模式的主要区别是什么?

我对编程比较陌生,如果这是一个愚蠢的问题,我很抱歉,但它们看起来与我很相似。

最佳答案

这个答案就像大多数模式答案真的只是我的解释,我所说的大部分内容都是基于 Active RecordTable Data Gateway Martin Fowler 网站上的描述。

关键引用是关于表数据网关的:

An object that acts as a Gateway (466) to a database table. One instance handles all the rows in the table.



这是关于 Active Record:

An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.



所以在最简单的层面上,Table Data Gateway 抽象了一个数据库表,而 Active Record 从一个表中包装了一行。

我从阅读中得到的另一个关键点是 Active Record 对象是域对象,这意味着您调用 Update() 以保存数据库更改的对象也是包含业务逻辑的对象。对于表数据网关,情况并非如此,网关通常会充当一个层,将数据库调用的输出转换为域对象,并且当您想要保留对这些对象的更改时,您将返回到网关并告诉网关网关保存。

最后,表数据网关在整个表上工作这一事实在设计和您如何考虑数据访问方面很重要。

我从来没有特别使用过 Active Record,但曾参与过一个在其设计中使用 Table Data Gateway 的大项目。这是一个可靠的模式,但许多人会说它已经过时了 - 您将所有数据访问权限保留在一个地方并允许您的 DBA 拥有数据库的优势已被 ORM 的新优势所取代,ORM 为开发人员提供了良好的对象在开发时间和透明度方面具有相应优势的面向数据的工作方法。

(我不太热衷于评论以上段落中有多少是真实的 - 我只是想代表一些社区意见。我目前使用 ORM,但也可以很高兴地回到网关方法)

关于design-patterns - Active Record 和表数据网关的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7457550/

相关文章:

design-patterns - 工厂模式中组件之间的依赖

sql - 将 Rails 查询更改为纯 SQL

ruby-on-rails - ActiveRecord 按 2 列分组

ruby-on-rails - Ruby on Rails ActiveRecord : optimizing increment by one

ruby-on-rails - 根据父模型验证模型

php - 什么是存储库、服务和操作/ Controller ?

python - 在 python 中执行步骤的最佳设计模式

java - 当我们可以推迟 RealClass 中昂贵的过程时,为什么还要费心使用代理模式呢?

java - 使用 RxJava2 正确处理背压和并发

sql - Rails 数据库 boolean 值