架构模式中的Active Record和Data Mapper

概念
  • 在简单应用中,领域模型是一种和数据库结构一致的简单结构,对应每个数据库表都有一个领域类,在这种情况下,有必要让每个对象负责数据库的存取过程,这也就是Active Record(活动记录)。
  • 领域对象直接鱼数据库表进行交互,这带来了一个问题,随着领域逻辑变的更加复杂,它就慢慢转变成一个大的领域模型,简单的Active Record已经不能满足要求了。
  • 领域类和表一对一匹配也开始随着把领域逻辑放入更小的类而失效。关系数据库无法处理继承,因此使用策略模式等面相对象模式非常困难。
  • 一种更好的办法是把数据库和数据库完全独立,让间接层完全领域对象和数据库表之间的映射,这个映射类也称作Data Mapper(数据映射器)。这个映射类处理数据库和领域模型之间所有的存取操作,并且允许双方都能独立变化。
  • 如果领域逻辑非常简单并且类和表十分一致,使用简单的Active Record就足够了。如果领域逻辑比较复杂,长线项目,Data Mapper则可能是需要的。
ORM中的Active Record和Data Mapper
  • Ruby和Laravel的ORM都采取了Active Record的模式,因此它们ORM可能像下面这样:
 $user = new User;
$user->username = 'philipbrown';
$user->save();
  • 再来看使用Data Mapper的ORM是怎样的:
$user = new User;
$user->username = 'philipbrown';
EntityManager::persist($user);
  • 现在我们察看到了它们最基本的区别:在Active Record中,领域对象有一个save()方法,领域对象通常会继承一个ActiveRecord的基类来实现。而在Data Mapper模式中,领域对象不存在save()方法,持久化操作由一个中间类来实现。

最新文章

  1. sublime的插件安装
  2. Oracle EBS Setup
  3. TStringHelper的相关知识、Helper相关细节
  4. SQL ALTER TABLE 语句在项目中的使用
  5. 转 Datatables中文API——基本参数
  6. php多版本管理phpenv
  7. Reason: Server is in single user mode. Only one administrator can connect at this time
  8. u-boot烧写Linux及系统整个启动过程
  9. 安装ucenter 步骤详解及supesite 安装详解
  10. 项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(2)
  11. 《玩转spring全家桶》学习笔记-------------丁雪丰
  12. python 模块 wmi 远程连接 windows 获取配置信息
  13. python----运行机制
  14. tomcat 绑定域名 防止恶意域名绑定
  15. [学习一个] Matlab GUI 学习笔记 Ⅰ
  16. c#启动windows服务问题总结
  17. 动态加载JS脚本到HTML
  18. 【LOJ】#2585. 「APIO2018」新家
  19. iOS 内嵌 View 的响应
  20. GROUP_CONCAT 拼接顺序

热门文章

  1. Vijos1035 贪婪的送礼者 [map的应用]
  2. TCP&IP基础概念复习
  3. java的package和import机制
  4. Spring Boot 单元测试示例
  5. layui treeSelect
  6. 20191017-6 alpha week 2/2 Scrum立会报告+燃尽图 05
  7. $Poj1934\ Trip$ 线性$DP+$搜索
  8. python+selenium+Chrome options参数
  9. 小小知识点(三十一)MU-MIMO和SU-MIMO分别表示什么?
  10. Bandicam(班迪录屏)高清视频录制工具