我正在查看 DataMapper,乍一看它似乎使用了 ActiveRecord ORM 模式。其他人说它使用 DataMapper 和/或域对象模式。
这些模式有什么区别?
两种模式的主要区别是:
在 ActiveRecord 中,您有一个域对象,它既知道所有业务逻辑,又知道如何在数据库中保存/更新自身,user.getLinkToProfile() 和 User::find(1)、User::save(user)
在 DataMapper 模式中,您有一个域对象来保存所有业务逻辑,例如 user.getLinkToProfile() (或类似的东西),但对相关数据库一无所知,除此之外,您还有一个映射器 -负责保存、更新、选择等的对象。数据库中的用户对象将具有 UserMapper::find(1)、UserMapper.save(user)
我个人更喜欢,而不是你问的那样,随着域对象、数据映射器的分离,可能使用组装模式甚至数据传输模式来确保数据库和上层数据之间发生的数据的清晰分离。申请。
...优雅而简单的分离总是有帮助的。