我看着DataMapper,乍一看似乎使用了ActiveRecord ORM模式。其他人说它使用DataMapper和/或Domain Object模式。
这些模式有什么区别?
答案 0 :(得分:20)
两种模式的主要区别在于:
在ActiveRecord中,您有一个域对象,它既知道所有业务逻辑,又知道如何在数据库中保存/更新自己,user.getLinkToProfile()和User :: find(1),User :: save (用户)
在DataMapper模式中,您有一个包含所有业务逻辑的域对象,例如,对于有问题的数据库,只知道没有的没有,除此之外,你还有一个mapper-object,它负责保存,更新,选择等数据库中的用户对象,这些对象具有UserMapper :: find(1),UserMapper.save(user)
DataMap可能比ActiveRecord更复杂,但使用ActiveRecord开发域模型和异步数据要容易得多。
答案 1 :(得分:2)
活动记录非常繁重,数据映射器和域对象将这些问题分开,因此您可以为“域”或“实体”对象提供更多定义的代码集。
我个人更喜欢,不是你问的问题,与分离到域对象,数据映射器,可能使用汇编模式甚至数据传输模式,以确保清楚地分离数据库和上层之间的数据发生了什么申请书。
...优雅而简单的分离总是有帮助的。