ORM/DAO/DataMapper/ActiveRecord/TableGateway 的区别?

Posted

技术标签:

【中文标题】ORM/DAO/DataMapper/ActiveRecord/TableGateway 的区别?【英文标题】:ORM/DAO/DataMapper/ActiveRecord/TableGateway differences? 【发布时间】:2011-03-13 00:32:25 【问题描述】:

能否请您解释一下以下数据库代表之间的区别,例如,在 php 中。

ORM 道 数据映射器 活动记录 表网关

任何示例都将不胜感激。

【问题讨论】:

相关:What is the difference between the Data Mapper, Table Data Gateway (Gateway), Data Access Object (DAO) and Repository patterns? 【参考方案1】:

这需要很长的答案。我没有重复其他人在我之前说得更好和更详细的内容,而是将您链接到一些相关页面。我建议浏览它们。也许跟随一些额外的链接。***总是一个好的开始。如果您在浏览链接后仍然对其中一种模式有任何疑问,请随时返回 SO 并再次提问。但是,如果您这样做,请尝试缩小范围。最好提出多个问题并专注于特定方面,而不是期望人们为你写一篇文章。

Object Relational Mapper

计算机软件中的对象关系映射(ORM、O/RM 和 O/R 映射)是一种编程技术,用于在关系数据库中不兼容的类型系统和面向对象的编程语言之间转换数据。

Data Access Object

使用数据访问对象 (DAO) 来抽象和封装对数据源的所有访问。 DAO 管理与数据源的连接以获取和存储数据。

DataMapper

映射器层 (473) 在对象和数据库之间移动数据,同时保持它们彼此独立以及映射器本身。

Active Record

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

Table Data Gateway

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

【讨论】:

我觉得 Table Data Gateway 和 DataMapper 在很大程度上是相同的模式。它们都将域对象与查询分开,并且都需要一种将对象数据映射到数据库的方法。我看到的唯一区别是 Table Data Gateway 要求您显式注入每个字段,而 DataMapper 可以接受一个对象并自行处理映射。对吗? @Agmlauncher 否。TableDataGateways 处理行,而不是域对象。也就是说,TableDataGateways 返回数据库中记录的 1:1 表示。只有当您开始将这些映射到独立结构化的域对象时,您才会获得 DataMapper。 我明白了,所以它们不是相互排斥的模式,TDG 的级别似乎比 DM 略低,如果需要,DM 可以使用一个(或多个?)TDG。对吗? @Gordon 根据Martin Fowler TableDataGateway 处理表,而 RowDataGateway 处理行。 @IntelliData 嗯,不知道你想告诉我什么?您确实意识到我正在链接到您链接的那个页面上的模式,并且描述是来自相应模式页面的引用,是吗?

以上是关于ORM/DAO/DataMapper/ActiveRecord/TableGateway 的区别?的主要内容,如果未能解决你的问题,请参考以下文章