ActiveRecord模式与"域对象"或者"数据映射器"模式有何不同?
时间:2020-03-06 14:22:02 来源:igfitidea点击:
我正在看DataMapper,它乍看起来是使用ActiveRecord ORM模式的。其他人说它使用DataMapper和/或者Domain Object模式。
这些模式之间有什么区别?
解决方案
两种模式之间的主要区别是:
- 在ActiveRecord中,我们有一个域对象user.getLinkToProfile()和User :: find(1),User :: save(user)都知道所有业务逻辑以及如何在数据库中保存/更新自身。
- 在DataMapper模式中,我们具有一个域对象,该域对象包含所有业务逻辑,例如user.getLinkToProfile()(或者类似内容),但对所涉及的数据库一无所知,此外,我们还有一个负责映射的对象用于从数据库中保存,更新,选择等用户对象,这些对象将具有UserMapper :: find(1),UserMapper.save(user)
DataMapper可能比ActiveRecord更复杂,但是与ActiveRecord相比,异步开发域模型和数据库要容易得多。
活动记录非常繁琐,数据映射器和域对象将这些问题分离开了,因此我们拥有一组更为定义的代码,可以为"域"或者"实体"对象进行各个方面的操作。
我个人更喜欢(不是我们问的那样),将域对象,数据映射器分开,可能使用组装模式,甚至使用数据传输模式,以确保将数据库和应用程序上层之间的数据清楚地分开。 。
...优雅而简单的分隔总是有帮助的。