首页 > 其他分享 >[图解]企业应用架构模式2024新译本讲解19-数据映射器1

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

时间:2024-07-06 13:28:40浏览次数:10  
标签:02 03 00 01 04 映射器 19 企业应用 --

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
都会慢慢看到的

标签:02,03,00,01,04,映射器,19,企业应用,--
From: https://blog.csdn.net/qq_44624290/article/details/140227881

相关文章

  • 第19节 指针与函数
    文章目录第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数2、数组作为函数的参数2.引用和指向函数的指针3、引用4、指向函数的指针第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数►指针最重要的应用是作为函数参数,它使得被调函数......
  • [每日一题] - CF1982E
    校内作业多,一直忘记写blog现在开始补上量赛后几天秒掉了,场上真是困糊涂了,没想到分治#include<bits/stdc++.h>usingnamespacestd;constintmod=1e9+7;#definelllonglong#definenodepair<int,pair<ll,ll>>#definemp(x,y,z)make_pair(x,make_pair(y,z))#definefi......
  • Redis 7.x 系列【19】管道
    有道无术,术尚可求,有术无道,止于术。本系列Redis版本7.2.5源码地址:https://gitee.com/pearl-organization/study-redis-demo文章目录1.往返时间2.管道技术3.代码演示4.其他批处理4.1原生批处理命令4.2事务4.3脚本1.往返时间官方文档Redis是一种基......
  • 【SPIE 独立出版 | 高录用稳检索 | 过往4届均已检索】第五届计算机视觉和数据挖掘国际
    第五届计算机视觉与数据挖掘国际学术会议(ICCVDM2024)将于2024年7月19-21日在中国长春举行。此前,ICCVDM系列会议于2020年在中国西安、2021年在中国长沙(线上)、2022年在中国呼伦贝尔(线上+线下)、2023年在中国长春(线上+线下)皆已成功举办。ICCVDM为世界各地该领域的专家、学者......
  • 代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、
    今天来处理二叉树part1、2、3,顶级享受,一次到位。完全二叉树和满二叉树概念没问题。二叉搜索树,左子树所有结点的值小于它的根结点的值,右子树上所有结点的值大于它的根结点的值平衡二叉搜索树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1。二叉树的存储方式:链式存储......
  • 基于Go1.19的站点模板爬虫
    要基于Go1.19创建一个站点模板爬虫,你可以使用Go语言的标准库和一些第三方库(如colly或goquery)来实现网页抓取和解析。以下是一个简单的示例,展示了如何使用colly库编写一个站点模板爬虫:安装Colly库:首先,确保你已经安装了Go,并设置好了Go的工作环境。然后使用以下命令安装col......
  • China.NETConf2019 - 用ASP.NETCore构建可检测的高可用服务
    一、前言2019中国.NET开发者峰会(.NETConfChina2019)于2019年11月10日完美谢幕,校宝在线作为星牌赞助给予了峰会大力支持,我和项斌等一行十位同事以讲师、志愿者的身份公司参与到峰会的支持工作中,我自己很荣幸能够作为讲师与大家交流,分享了主题《用ASP.NETCore构建可检测的高......
  • 欧拉 EulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。
    欧拉EulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。EulerOSEulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。EulerOS开发者华为技术有限公司作業系統家族Unix ,Linux,CentOS運作狀態活跃源码模式开源软件当前版本2.......
  • 洛谷 P1020 [NOIP1999 提高组] 导弹拦截
    题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所......
  • 洛谷 P1011 [NOIP1998 提高组] 车站
    题目描述火车从始发站(称为第 1 站)开出,在始发站上车的人数为 a,然后到达第 2 站,在第 2 站有人上、下车,但上、下车的人数相同,因此在第 2 站开出时(即在到达第 3 站之前)车上的人数保持为 a 人。从第 3 站起(包括第 3 站)上、下车的人数有一定规律:上车的人数都是前两......