ActiveRecord模式与Domain Object或Data Mapper模式有何不同?

时间:2008-09-18 15:49:43

标签: ruby-on-rails activerecord datamapper

我看着DataMapper,乍一看似乎使用了ActiveRecord ORM模式。其他人说它使用DataMapper和/或Domain Object模式。

这些模式有什么区别?

2 个答案:

答案 0 :(得分:20)

两种模式的主要区别在于:

  • 在ActiveRecord中,您有一个域对象,它既知道所有业务逻辑,又知道如何在数据库中保存/更新自己,user.getLinkToProfile()和User :: find(1),User :: save (用户)

  • 在DataMapper模式中,您有一个包含所有业务逻辑的域对象,例如,对于有问题的数据库,只知道没有没有,除此之外,你还有一个mapper-object,它负责保存,更新,选择等数据库中的用户对象,这些对象具有UserMapper :: find(1),UserMapper.save(user)

DataMap可能比ActiveRecord更复杂,但使用ActiveRecord开发域模型和异步数据要容易得多。

答案 1 :(得分:2)

活动记录非常繁重,数据映射器和域对象将这些问题分开,因此您可以为“域”或“实体”对象提供更多定义的代码集。

我个人更喜欢,不是你问的问题,与分离到域对象,数据映射器,可能使用汇编模式甚至数据传输模式,以确保清楚地分离数据库和上层之间的数据发生了什么申请书。

...优雅而简单的分离总是有帮助的。