Data Mapper与数据访问对象.区别.哪一个更好?

war*_*nds 6 php database design-patterns domain-driven-design

可能重复:
ORM/DAO/DataMapper/ActiveRecord/TableGateway的差异?

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

ter*_*ško 6

数据映射器直接从(并恢复)域对象保存数据,而数据访问对象将用作域对象和存储抽象之间的信息交换的中介.

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

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

并且没有提到的模式与ORM相关联.一些ORM试图使用上面提到的模式来实现,但是它们通常做得很糟糕.

大多数,你称之为"现代框架"使用活动记录模式并将其称为"模型"的实例,这种概念极其简化,由Rails延续.

  • @JvdBerg和?数据映射器等都是高级主题. (5认同)
  • [PHP 5 对象、模式和实践](http://www.amazon.com/PHP-5-Objects-Patterns-Practice/dp/1590593804) 不是“php 初学者”*(无论这意味着什么)*会读。 (2认同)
  • @JvdBerg:整个问题不适用于PHP启动程序. (2认同)