Active Record和Table Data Gateway之间的差异

Dav*_*vid 13 activerecord design-patterns

主动记录模式和表数据网关模式之间的主要区别是什么?

如果这是一个愚蠢的问题,我对编程相对较新,所以道歉,但它们看起来和我很相似.

Dav*_*all 16

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

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

充当数据库表的网关(466)的对象.一个实例处理表中的所有行.

关于Active Record:

在数据库表或视图中包装行的对象,封装数据库访问,并在该数据上添加域逻辑.

因此,在最简单的级别,Table Data Gateway抽象数据库表,而Active Record从表中包装一行.

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

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

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

(我并不是真的热衷于评论上述段落​​中有多少是真的 - 我只是想代表一些社区意见.我目前使用的是ORM,但也可以愉快地回到网关方法)