ORM/DAO/DataMapper/ActiveRecord/TableGateway的区别是什么?

15

请问你能否解释一下以下数据库代表的区别,以PHP为例:

ORM DAO DataMapper ActiveRecord TableGateway

如能举例说明将不胜感激。


什么是数据映射器(Data Mapper)、表格数据网关(Gateway)、数据访问对象(DAO)和仓库(Repository)模式的区别? - Bergi
1个回答

19
那需要一份相当长的答案。不如重复别人在比我更好和更详细的情况下所说的,我会链接给你一些相关页面。建议你浏览一下它们,也许跟随一些额外的链接。维基百科总是一个不错的开始。如果在查看链接后仍有关于其中一个或另一个模式的任何问题,请随时回到SO并再次提问。但是如果您这样做,请尝试缩小范围。最好提出多个问题并专注于特定方面,而不是期望人们为您写一篇文章。

对象关系映射

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

数据访问对象

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

数据映射器

一层Mappers(473),将数据在对象和数据库之间移动,同时使它们彼此独立且独立于映射器本身。

Active Record

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

表数据网关

一个用于从数据库中获取和存储数据的网关,封装了所有与数据源的通信。

网关对象 (466),用于连接数据库表。一个实例可以处理表中的所有行。


我觉得Table Data Gateway和DataMapper这两种模式基本相同。它们都将领域对象与查询分开,并且都需要一种将对象数据映射到数据库的方式。我唯一看到的区别是,Table Data Gateway需要你明确注入每个字段,而DataMapper可以接受一个对象并自行处理映射。这样说对吗? - AgmLauncher
@AgmLauncher 不是的。TableDataGateways 处理的是行,而不是领域对象。也就是说,TableDataGateways 返回的是数据库中记录的一对一表示。只有当你开始将这些映射到一个独立结构的领域对象时,才会得到一个 DataMapper。 - Gordon
我明白了,所以它们不是互斥的模式,TDG似乎比DM略低一级,如果需要,DM可以利用一个(或多个?)TDG。这正确吗? - AgmLauncher
根据Martin Fowler的说法,TableDataGateway处理表格,而RowDataGateway处理行。 - IntelliData
@Gordon 如果我误解了你的话,请原谅。在你的评论中,你说TableDataGateways处理行;根据Fowler的说法,TableDataGateway处理整个表,而RowDataGateway处理行。顺便说一下,当我发表评论时,我没有意识到我们引用的是同样的来源。 - IntelliData
显示剩余3条评论

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