我看的是DataMapper,乍一看它似乎使用了ActiveRecord ORM模式。其他人说它使用了DataMapper和/或Domain Object模式。这两种模式有什么区别?
jhdbpxl91#
这两种模式的主要区别是:
user.getLinkToProfile()
User::find(1)
User::save(user)
UserMapper::find(1)
UserMapper.save(user)
DataMapper可能比ActiveRecord更复杂,但它比ActiveRecord更容易异步开发域模型和数据库。
tpxzln5u2#
活动记录非常繁重,数据Map器和域对象将这些关注点分离出来,因此您有一组更定义的代码为您的“域”或“实体”对象执行各个方面。我个人更喜欢,不是你问的,与域对象,数据Map器的分离,可能使用组装模式,甚至数据传输模式,以确保数据库和应用程序的上层之间发生的数据的清晰分离。.优雅和简单的分离总是有帮助的。
2条答案
按热度按时间jhdbpxl91#
这两种模式的主要区别是:
user.getLinkToProfile()
和User::find(1)
、User::save(user)
user.getLinkToProfile()
(或类似的东西),但对所讨论的数据库一无所知,除此之外,你还有一个Map器对象,它负责保存,更新,选择等数据库中的用户对象,这些对象将包含UserMapper::find(1)
,UserMapper.save(user)
DataMapper可能比ActiveRecord更复杂,但它比ActiveRecord更容易异步开发域模型和数据库。
tpxzln5u2#
活动记录非常繁重,数据Map器和域对象将这些关注点分离出来,因此您有一组更定义的代码为您的“域”或“实体”对象执行各个方面。
我个人更喜欢,不是你问的,与域对象,数据Map器的分离,可能使用组装模式,甚至数据传输模式,以确保数据库和应用程序的上层之间发生的数据的清晰分离。
.优雅和简单的分离总是有帮助的。