数据映射器与数据访问对象.差别哪一个更好


Data Mapper vs Data access object. Difference. Which one is the better one?

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

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

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

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

这两种模式都与活动记录(anti)模式无关,后者在单个实例中结合了域逻辑和存储抽象,从而打破了SRP。

上述模式都与ORM无关。一些ORM试图使用上面提到的模式来实现,但他们通常在这方面做得很糟糕。

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