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

Joe*_*Dyk 9 activerecord ruby-on-rails datamapper

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

这些模式有什么区别?

thr*_*thr 20

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

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

  • 在DataMapper模式中,您有一个包含所有业务逻辑的域对象,例如exmaple user.getLinkToProfile()(或类似的东西),但对所讨论的数据库一无所知,除此之外,您还有一个负责的mapper-object用于保存,更新,选择等数据库中的用户对象,其中包含UserMapper :: find(1),UserMapper.save(user)

DataMapper可能比ActiveRecord更复杂,但使用ActiveRecord开发域模型和数据库异常要容易得多.