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

时间:2012-09-04 19:03:29

标签: php database design-patterns domain-driven-design

  

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

大多数,你所谓的“现代框架”使用活动记录模式并将其称为“模型”的实例,这是Rails永久性概念的极端简化。