架构模式中的Active Record和Data Mapper
2024-09-06 16:01:18
架构模式中的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()方法,持久化操作由一个中间类来实现。
最新文章
- sublime的插件安装
- Oracle EBS Setup
- TStringHelper的相关知识、Helper相关细节
- SQL ALTER TABLE 语句在项目中的使用
- 转 Datatables中文API——基本参数
- php多版本管理phpenv
- Reason: Server is in single user mode. Only one administrator can connect at this time
- u-boot烧写Linux及系统整个启动过程
- 安装ucenter 步骤详解及supesite 安装详解
- 项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(2)
- 《玩转spring全家桶》学习笔记-------------丁雪丰
- python 模块 wmi 远程连接 windows 获取配置信息
- python----运行机制
- tomcat 绑定域名 防止恶意域名绑定
- [学习一个] Matlab GUI 学习笔记 Ⅰ
- c#启动windows服务问题总结
- 动态加载JS脚本到HTML
- 【LOJ】#2585. 「APIO2018」新家
- iOS 内嵌 View 的响应
- GROUP_CONCAT 拼接顺序
热门文章
- Vijos1035 贪婪的送礼者 [map的应用]
- TCP&;IP基础概念复习
- java的package和import机制
- Spring Boot 单元测试示例
- layui treeSelect
- 20191017-6 alpha week 2/2 Scrum立会报告+燃尽图 05
- $Poj1934\ Trip$ 线性$DP+$搜索
- python+selenium+Chrome options参数
- 小小知识点(三十一)MU-MIMO和SU-MIMO分别表示什么?
- Bandicam(班迪录屏)高清视频录制工具