[图解]企业应用架构模式2024新译本讲解19-数据映射器1

1
00:00:01,720 --> 00:00:03,950
下一个我们要讲的就是

2
00:00:04,660 --> 00:00:07,420
数据映射器这个模式

3
00:00:09,760 --> 00:00:13,420
这个也是在数据源模式里面

4
00:00:13,430 --> 00:00:14,820
用得最广泛的

5
00:00:16,250 --> 00:00:19,170
大多数都是用

6
00:00:19,180 --> 00:00:21,540
数据映射器模式的产品

7
00:00:21,550 --> 00:00:25,370
来做数据库的访问

8
00:00:28,710 --> 00:00:29,660
我们看它的定义

9
00:00:31,100 --> 00:00:34,530
在保持对象

10
00:00:34,800 --> 00:00:37,190
还有数据库以及映射器本身

11
00:00:37,360 --> 00:00:39,070
彼此独立的情况下

12
00:00:40,080 --> 00:00:43,640
在二者之间移动数据的一个映射器层

13
00:00:45,860 --> 00:00:48,050
彼此独立的意思就是什么

14
00:00:48,650 --> 00:00:50,970
可以换了

15
00:00:51,100 --> 00:00:52,450
比如说,你可以换数据库

16
00:00:53,920 --> 00:00:58,460
后面可以是关系数据库

17
00:00:58,710 --> 00:01:02,870
关系数据库也可以换不同产品

18
00:01:05,320 --> 00:01:07,030
包括映射器本身也可以换

19
00:01:07,620 --> 00:01:07,940


20
00:01:08,860 --> 00:01:12,810
比如说,你本来用,如果是映射器

21
00:01:13,510 --> 00:01:15,700
你本来用的是,比如说

22
00:01:16,030 --> 00:01:16,700
Hibernate

23
00:01:17,530 --> 00:01:26,120
你换成Mybatis之类的,都可以换

24
00:01:31,960 --> 00:01:32,390
我们来看

25
00:01:33,900 --> 00:01:36,740
映射器的好处就是说

26
00:01:36,750 --> 00:01:41,520
它可以保持领域层干净

27
00:01:41,530 --> 00:01:46,360
我们前面讲的活动记录也好

28
00:01:50,960 --> 00:01:51,960
入口也好

29
00:01:52,640 --> 00:01:53,780
入口它本身就是

30
00:01:55,770 --> 00:01:58,430
没有领域逻辑在里面了

31
00:01:59,490 --> 00:02:02,880
就是数据在内存的一个映射

32
00:02:02,890 --> 00:02:06,650
活动记录就是在入口之上加上领域逻辑

33
00:02:09,470 --> 00:02:13,730
但是映射器这里

34
00:02:13,860 --> 00:02:16,730
Person这个类

35
00:02:17,050 --> 00:02:19,090
它就可以是干净的

36
00:02:19,300 --> 00:02:21,700
里面只有领域概念

37
00:02:21,830 --> 00:02:25,030
一些领域的操作

38
00:02:25,730 --> 00:02:35,310
没有跟数据访问相关的或者其他

39
00:02:35,910 --> 00:02:38,030
领域类它就可以不知道数据库的存在

40
00:02:38,780 --> 00:02:42,500
也不需要知道映射器的存在

41
00:02:43,770 --> 00:02:47,170
意味着整个映射器是可以更换的

42
00:02:47,780 --> 00:02:50,720
因为它本身根本就不知道

43
00:02:50,730 --> 00:02:51,800
你用了什么映射器

44
00:02:52,140 --> 00:02:53,300
也不知道你用了什么数据库

45
00:02:54,410 --> 00:02:56,180
所以你完全可以

46
00:02:56,860 --> 00:03:01,650
换另外一个映射器来配合它

47
00:03:06,780 --> 00:03:13,320
显然,这样一种模式

48
00:03:13,330 --> 00:03:16,230
它在什么情况下是比较适合的

49
00:03:18,370 --> 00:03:20,730
数据库和领域是单独演变的

50
00:03:22,030 --> 00:03:23,830
这样一种方式是比较适合的

51
00:03:26,180 --> 00:03:28,640
但实际上大家都觉得

52
00:03:28,650 --> 00:03:30,120
自己的应用

53
00:03:30,130 --> 00:03:32,900
都希望单独演变

54
00:03:33,030 --> 00:03:34,770
但在实际中

55
00:03:35,140 --> 00:03:36,930
我们往往就高估了

56
00:03:38,000 --> 00:03:42,120
平台的单独演变这种可能性

57
00:03:42,690 --> 00:03:43,440
很多时候

58
00:03:43,450 --> 00:03:48,400
我们根本就没有真正的这种需要

59
00:03:50,220 --> 00:03:53,070
但是这个作为它的一个优点

60
00:03:56,240 --> 00:04:00,020
跟其他的相比

61
00:04:00,840 --> 00:04:01,760
这是一个优点

62
00:04:02,990 --> 00:04:07,670
第二个,肯定是面向对象的

63
00:04:07,680 --> 00:04:10,840
因为你要保持领域对象的干净

64
00:04:10,850 --> 00:04:12,600
领域逻辑

65
00:04:13,840 --> 00:04:18,480
是因为你是面向对象的这种实现

66
00:04:19,190 --> 00:04:20,880
才有必要这样来做

67
00:04:20,890 --> 00:04:22,760
否则你根本不是面向对象的

68
00:04:22,770 --> 00:04:27,050
你前面都没有什么对象的封装等等

69
00:04:27,770 --> 00:04:30,320
你就直接用一个入口就可以了

1
00:00:00,570 --> 00:00:04,040
下面这个就是映射器的类图了

2
00:00:06,480 --> 00:00:09,480
当然这个画得比较简单了

3
00:00:09,490 --> 00:00:12,190
就是说,映射器负责依赖这两边

4
00:00:12,400 --> 00:00:14,860
但这两边互相是不知道的

5
00:00:19,000 --> 00:00:22,850
序列图,这是书上我们截屏下来的序列图

6
00:00:23,490 --> 00:00:25,040
从数据库检索数据

7
00:00:27,680 --> 00:00:32,020
由映射器来取

8
00:00:32,110 --> 00:00:35,880
然后这里如果说

9
00:00:36,610 --> 00:00:38,090
map

10
00:00:38,100 --> 00:00:42,240
就是一个内存里面

11
00:00:42,450 --> 00:00:44,280
的映射还不存在

12
00:00:44,690 --> 00:00:47,120
这里就给它新建一个

13
00:00:48,090 --> 00:00:50,310
存在,就直接用这个就行了

14
00:00:52,880 --> 00:00:58,670
然后get如果是没有,返回空

15
00:00:58,680 --> 00:01:03,520
那么就访问数据库得到数据

16
00:01:03,530 --> 00:01:08,060
然后由它来把这个对象

17
00:01:08,070 --> 00:01:09,980
在内存里面创建起来

18
00:01:10,690 --> 00:01:12,600
相当于把数据库里面的数据

19
00:01:12,610 --> 00:01:13,640
搬到内存里面

20
00:01:13,650 --> 00:01:14,880
来建立一个映像

21
00:01:16,180 --> 00:01:19,060
当然,同时要把它加到map里面

22
00:01:19,070 --> 00:01:21,020
如果map里面不存在

23
00:01:23,060 --> 00:01:24,620
更新也是一样,更新

24
00:01:24,630 --> 00:01:27,900
把数据拿过来

25
00:01:28,680 --> 00:01:32,220
由它来更新到数据库里面去

26
00:01:33,140 --> 00:01:36,330
这些一会我们在演示示例代码的时候

27
00:01:36,990 --> 00:01:38,980
都会慢慢看到的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链篦机回转窑球团生产工艺

生球在回转窑氧化焙烧,回转窑头部设有燃烧器,燃料可以采用气体、固体、液体。 来自环冷机一冷却段的高温废气作为二次风进入窑内参与燃烧,烧成成品球进入环冷机。 环冷机采用鼓风冷却,热风风箱分为四段: 一段气体引至…

无人机有哪些关键技术?

一、控制技术 无人机的核心还是在控制上,飞控系统的可靠性、稳定性及可扩展性是其中重要的指标。可靠性上,除了器件选型之外,目前主要靠多余度来增加;稳定性主要体现在多场景下仍能保持良好的工作状态,主要靠算法来进…

【Nginx】docker运行Nginx及配置

Nginx镜像的获取 直接从Docker Hub拉取Nginx镜像通过Dockerfile构建Nginx镜像后拉取 二者区别 主要区别在于定制化程度和构建过程的控制: 直接拉取Nginx镜像: 简便性:直接使用docker pull nginx命令可以快速拉取官方的Nginx镜像。这个过程…

通透!手把教你如何从头构建一个机器学习模型

目录 1.业务理解 2.数据收集和准备 数据采集 探索性数据分析 (EDA) 和数据清理 特征选择 3.建立机器学习模型 选择正确的模型 分割数据 训练模型 模型评估 4.模型优化 5.部署模型 今天我将带领大家一步步的来构建一个机器学习模型。 我们将按照以下步骤开发客户流失…

【基础算法】UE中实现轮播

本期作者:尼克 易知微3D引擎技术负责人 当前N 总数M 从0到M-1 从1到M 感谢阅读,以上内容均由易知微3D引擎团队原创设计,以及易知微版权所有,转载请注明出处,违者必究,谢谢您的合作。申请转载授权后台回复【…

掌握XD数字设计:打造令人惊艳的用户体验

xd是adobe旗下一款主打UI界面设计-建立原型的软件,它可以将wireframe、design、以及prototype等UI/UX设计流程整合到一个软件中,算是一款与sketch对打的软件。 与PS相比,在UI设计方面,Adobe XD有非常突出的3个优点:能…

从0到1手写vue源码

模版引擎 数组join法(字符串) es6反引号法(模版字符串换行) mustache (小胡子) 引入mustache 模版引擎的使用 mustache.render(templatestr,data) mustache.render 循环简单数组 循环复杂数组 循环单项数组 数组的嵌套 musta…

江苏徐州SAP代理商有哪些?怎么选择?

在数字化浪潮席卷全球的今天,企业对于高效、智能的管理系统需求日益迫切。SAP作为全球领先的企业管理软件解决方案提供商,其产品在市场上享有极高的声誉。而在江苏徐州,哲讯智能科技作为SAP的代理商,以其专业的技术实力和优质的服…

开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538

开源一个基于IP6557和IP6538芯片的205W升降压快充模块(140W65W),其中一路C口支持PD3.1协议,最高输出28V5A,另一路是A口C口,最高输出65W(20V3.25A),可搭配一个24V10A的开关…

SpringBoot-第一天学习

SpringBoot介绍-约定大于配置 SpringBoot是在Spring4.0基础上开发的,不是替代Spring的解决方案,而是和Spring框架结合并进一步简化Spring搭建和开发过程的。 如何简化?就是通过提供默认配置等方式让我们更容易,集成了大量常用的…

交叉测试的优点和缺点!

交叉测试在软件测试中具有重要的地位和作用。通过交叉测试,可以提高软件质量、提升用户体验、增加测试覆盖率、提高测试效率以及满足市场需求和竞争优势。因此,在软件开发和测试过程中,应充分重视交叉测试的实施和应用。 以下是对其优缺点的…

推荐3款Windows系统的神级软件,免费、轻量、绝对好用!

DiskView DiskView是一款用于管理和查看磁盘空间的工具,它集成了于微软的Windows操作系统资源管理器中,以显示直观的磁盘空间使用情况。该软件通过生成图形化地图,帮助用户组织和管理大量文件和文件夹,从而高效地管理磁盘空间。用…

JDBC 学习笔记+代码整理

Tip Idea自带可视界面👉MySQL 图形化界面-CSDN博客 Idea2022无add Framework support选项👉最新版IDEA:Add web Framework Support步骤/构建JavaWeb项目步骤_idea add framework support-CSDN博客 基本步骤 1.加载驱动包Driver 2.建立与数据库的连接C…

证券交易系统中服务器监控系统功能设计

1.背景介绍 此服务器监控系统的目的在于提高行情服务器的监管效率,因目前的的行情服务器,包括DM、DT、DS配置数量较多,巡回维护耗时较多,当行情服务器出现异常故障,或者因为网络问题造成数据断线等情况时,监…

芯科普| 矽光子是什麼?可以用在哪些领域?点击查看!

随着生成式人工智能的崛起,数据传输需求亦呈现爆发式增长。而在此背景下,台积电在半导体展览上披露的硅光子(SiPh:Silicon Photonics)技术进展,更是将硅光子推向了风口浪尖,成为了市场的宠儿。 …

IDEA导入依赖+Maven配置

Maven安装及配置 安装 安装链接:https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/ 注:建议不要直接安装最新版本,选用常用、稳定的版本安装即可,比如:3.6.3 配置 1> 配置bash_profile文件 终端输…

高效前端开发:解密pnpm的存储与链接

什么是pnpm PNPM(Performant NPM)是一种快速且节省磁盘空间的包管理工具。相较于其他包管理器如NPM和Yarn,PNPM通过独特的存储机制和链接技术解决了许多常见的问题。以下是PNPM如何避免这些问题以及其关键技术的详细介绍。 特性 PNPM Store…

【MySQL备份】Percona XtraBackup总结篇

目录 1.前言 2.问题总结 2.1.为什么在恢复备份前需要准备备份 2.1.1. 保证数据一致性 2.1.2. 完成崩溃恢复过程 2.1.3. 解决非锁定备份的特殊需求 2.1.4. 支持增量和差异备份 2.1.5. 优化恢复性能 2.2.Percona XtraBackup的工作原理 3.注意事项 1.前言 在历经了详尽…

数据库、创建表、修改表

一、数据库 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo 二、创建表 1、创建一个名称为db_system的数据库 2、在该数据库下创建两张表,具体要求如下 员工表 user…

图像的对数变换

对数变换在图像处理中通常有以下作用: 因为对数曲线在像素值较低的区域斜率较大,像素值较高的区域斜率比较低,所以图像经过对数变换之后,在较暗的区域对比度将得到提升,因而能增强图像暗部的细节。图像的傅里叶频谱其…