9

我在看DataMapper,乍一看似乎使用 ActiveRecord ORM 模式。其他人说它使用 DataMapper 和/或域对象模式。

这些模式有什么区别?

4

2 回答 2

21

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

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

  • 在 DataMapper 模式中,您有一个包含所有业务逻辑的域对象,例如 user.getLinkToProfile() (或类似的东西),但对相关数据库一无所知,除此之外,您还有一个负责的映射器对象用于保存、更新、选择等数据库中的用户对象,这些对象将具有 UserMapper::find(1)、UserMapper.save(user)

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

于 2008-09-18T16:17:07.567 回答
2

活动记录非常重,数据映射器和域对象将这些关注点分开,因此您有一组更明确的代码为您的“域”或“实体”对象执行各个方面。

我个人更喜欢,不是你问的,分离到域对象,数据映射器,可能使用组装模式甚至数据传输模式来确保清楚地分离数据库和应用程序上层之间的数据发生的事情.

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

于 2008-09-18T16:20:41.863 回答