数据映射器与数据访问对象。区别。哪个更好? [复制]

Posted

技术标签:

【中文标题】数据映射器与数据访问对象。区别。哪个更好? [复制]【英文标题】:Data Mapper vs Data access object. Difference. Which one is the better one? [duplicate] 【发布时间】:2012-08-29 11:38:42 【问题描述】:

可能重复:ORM/DAO/DataMapper/ActiveRecord/TableGateway differences?

有人可以帮我理解数据映射器和数据访问对象模式之间的区别吗?我已经从 zandstra 的书中了解了数据映射器模式。但是当我搜索数据访问对象时,我发现它们非常相似,甚至是相同的模式。另外我想知道在编写自己的框架时应该使用哪一个(我正在尝试实现自己的 mvc php 框架,只是为了了解现代框架的工作原理)。

【问题讨论】:

查看下面的链接***.com/questions/804751/… ***.com/questions/491938/… 【参考方案1】:

Data mapper 直接保存(并恢复到)domain object 的数据,而data access object 将用作域对象和存储抽象之间交换信息的中介。

<update> 两种方法的主要区别在于数据映射器临时控制域对象,而数据访问对象要么间接接收数据(通过一些更高级别的抽象,如服务),要么受控制(在某些实现中,甚至实例化) 通过域对象。</update>

这两种模式都与active record(反)模式远程相关,后者将域逻辑和存储抽象结合在单个实例中,从而破坏了SRP。

并且没有一个提到的模式与 ORM 相关联。一些 ORM 尝试使用上述模式来实现,但他们通常在这方面做得很差。

您所说的大多数“现代框架”使用活动记录模式并将其实例称为“模型”,这是由 Rails 延续的概念的极端简化。

【讨论】:

这个信息对于一个php初学者来说完全没用! PHP 5 Objects, Patterns, and Practice 不是“php starters”(不管那是什么意思) 会读的。 @JvdBerg 还有?数据映射器等都是高级主题。 @tereško 谢谢,所以我可以假设我们可以在将数据写入域模型之前将数据访问对象称为数据库中数据的“临时存储”。如果我错了,请纠正我。 @JvdBerg:这整个问题并不适合 PHP 初学者。

以上是关于数据映射器与数据访问对象。区别。哪个更好? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

哪个是 xcode 7.2 支持的 alamofire 对象映射器和 alamofire pod 版本

PHP面向对象之领域模型+数据映射器

具有核心数据的 Alamofire 对象映射器

我应该如何创建我的数据映射器/域对象/服务?

对象引用未设置为对象实例的自动映射器问题

MapStruct使用说明