[图解]企业应用架构模式2024新译本讲解22-标识映射

1

00:00:01,080 --> 00:00:04,710

我们来看一下标识映射这个模式

2

00:00:08,030 --> 00:00:10,110

它是属于对象-关系

3

00:00:10,120 --> 00:00:11,150

行为模式

4

00:00:11,160 --> 00:00:13,890

就是说,在动态的时候

5

00:00:15,770 --> 00:00:17,230

访问数据库,加载

6

00:00:17,730 --> 00:00:22,150

或者说写入数据库等等的时候

7

00:00:22,810 --> 00:00:27,230

需要用到的一个行为的模式

8

00:00:27,240 --> 00:00:30,360

行为模式

9

00:00:30,370 --> 00:00:33,120

有这么几个,标识映射是其中一个

10

00:00:35,670 --> 00:00:37,340

我们来看它的定义

11

00:00:38,100 --> 00:00:41,210

这个是很简单的一个模式了

12

00:00:44,480 --> 00:00:45,680

在映射中

13

00:00:46,530 --> 00:00:49,780

在一个mapper里面保存

14

00:00:49,790 --> 00:00:51,460

每个已经加载的对象

15

00:00:52,290 --> 00:00:54,810

目的是确保每个对象只加载一次

16

00:00:57,110 --> 00:00:58,540

需要引用对象的时候

17

00:00:58,550 --> 00:01:00,340

通过映射来查找它们

18

00:01:01,360 --> 00:01:03,030

这里有个查找器

19

00:01:03,800 --> 00:01:05,500

映射,查找

20

00:01:09,380 --> 00:01:11,040

找到了就用

21

00:01:11,560 --> 00:01:13,060

找不到说明什么

22

00:01:13,500 --> 00:01:15,780

没有加载,就要到数据库里面去

23

00:01:16,620 --> 00:01:23,350

你看这里,没找到,数据库里面去拿

24

00:01:26,500 --> 00:01:30,980

再把它加载到map里面

25

00:01:31,650 --> 00:01:32,590

映射里面

26

00:01:34,740 --> 00:01:38,420

这里面有几个要关注的点

27

00:01:38,510 --> 00:01:39,780

第一个,主键

28

00:01:42,230 --> 00:01:45,220

那么尽量都就用这种无意义代理主键了

29

00:01:45,230 --> 00:01:48,460

而且类型要一样的

30

00:01:48,590 --> 00:01:50,660

一般类型要么是长整数

31

00:01:50,750 --> 00:01:53,680

要么是字符串

32

00:01:55,770 --> 00:01:56,770

类型一样的

33

00:01:56,780 --> 00:02:02,280

就不要那种花里胡哨的主键,代理主键

1

00:00:00,570 --> 00:00:04,360

第二个问题就是这个,就是接口

2

00:00:04,370 --> 00:00:06,980

到底是这样的显式的接口

3

00:00:06,990 --> 00:00:08,220

还是通用的接口

4

00:00:10,860 --> 00:00:13,750

书里面是推荐的第一种了

5

00:00:14,660 --> 00:00:16,860

第一种,你就要写很多个了

6

00:00:16,870 --> 00:00:20,660

有多少个表,多少个类

7

00:00:20,670 --> 00:00:22,710

你就搞多少个

8

00:00:22,970 --> 00:00:24,740

第二个只要一个就够了

9

00:00:25,290 --> 00:00:27,020

而且还可以反复使用

10

00:00:27,030 --> 00:00:32,740

这个系统用了

11

00:00:32,750 --> 00:00:35,840

那下一个系统可以copy用都可以

12

00:00:38,020 --> 00:00:39,990

你只要改里面的数据就行了

13

00:00:40,750 --> 00:00:46,350

表名,主键,这个是硬写在这里的

14

00:00:48,650 --> 00:00:50,090

那么如果这样写

15

00:00:50,100 --> 00:00:51,540

它就变成一个什么

16

00:00:51,550 --> 00:00:57,020

跟这个领域没有关系的一个操作了

17

00:00:57,030 --> 00:00:59,860

而这个是把领域概念直接嵌到里面去了

18

00:01:02,480 --> 00:01:04,360

那么显然你换一个系统

19

00:01:04,370 --> 00:01:07,080

换一个领域就没有了,这就不能用了

20

00:01:08,890 --> 00:01:11,240

这只需要一个,这个要很多个

21

00:01:11,640 --> 00:01:15,050

但是书里面仍然是推荐这一种

22

00:01:15,420 --> 00:01:20,140

这种编译的时候

23

00:01:21,870 --> 00:01:22,950

可以编译在里面

24

00:01:22,960 --> 00:01:24,030

然后就可以判断出

25

00:01:24,040 --> 00:01:26,590

有哪些映射是可以用的

26

00:01:26,940 --> 00:01:28,790

可以做编译时的检查

27

00:01:30,550 --> 00:01:32,510

而这个是运行的时候

28

00:01:33,180 --> 00:01:35,650

根据这里面的参数来判断

29

00:01:40,890 --> 00:01:43,440

这是第二点

30

00:01:44,240 --> 00:01:44,760

第三点

31

00:01:47,610 --> 00:01:51,270

有几个这种标识映射

32

00:01:52,810 --> 00:01:57,960

那就要看你的数据库里面主键

33

00:01:57,970 --> 00:02:00,540

你是怎么来设置的

34

00:02:00,790 --> 00:02:04,560

如果说你每个表的主键是分立的

35

00:02:05,520 --> 00:02:05,940

这是一种

36

00:02:05,950 --> 00:02:06,660

第二个是什么

37

00:02:06,670 --> 00:02:07,540

数据库里面

38

00:02:09,070 --> 00:02:11,290

同一个数据库里面的所有的表

39

00:02:11,300 --> 00:02:12,650

它主键都是什么

40

00:02:13,200 --> 00:02:14,120

都是不同的

41

00:02:16,290 --> 00:02:17,170

如果是这样

42

00:02:17,180 --> 00:02:19,170

你这里的映射只需要一个就行了

43

00:02:20,250 --> 00:02:24,120

如果说有多个,映射就有多个

44

00:02:26,130 --> 00:02:28,440

Fowler的意思就是说

45

00:02:29,960 --> 00:02:31,450

推荐每个泛化树

46

00:02:32,200 --> 00:02:34,300

就一个标识映射

47

00:02:35,770 --> 00:02:39,680

也就是说,在我们设定主键的时候

48

00:02:41,100 --> 00:02:45,500

每棵泛化树,超类子类这一棵树

49

00:02:46,500 --> 00:02:49,090

它们用的主键应该是一致的

50

00:02:51,760 --> 00:02:53,070

那个算是一个体系

51

00:02:53,080 --> 00:02:59,510

那就每棵泛化树就一个标识映射

52

00:03:02,200 --> 00:03:05,410

主要是这么一点知识点

53

00:03:05,500 --> 00:03:07,930

因为这本身也没有什么太多的内容了

54

00:03:09,240 --> 00:03:11,110

就有一个在这里要查一下

55

00:03:11,120 --> 00:03:14,990

就判断在不在里面就行了

相关推荐
无心水19 小时前
15、云原生架构设计理论与实践 核心考点与学习笔记
笔记·学习·云原生·架构师·软考·系统架构设计师·软考系统架构设计师
Java爱好狂.2 天前
阿里1658页Java面试题总结(含答案)
java·后端·高并发·架构师·java面试·java面试题·java八股文
无心水3 天前
6、软件工程 核心考点与学习笔记
笔记·学习·软件工程·软考高级·架构师·软考·软考系统架构设计师
无心水3 天前
5、信息安全技术基础知识 核心学习笔
人工智能·学习·软考高级·架构师·软考·高级架构师·软考架构师
无心水3 天前
8、系统架构设计基础知识 核心考点与学习笔记
笔记·学习·系统架构·架构师·软考·软考架构师·软考高级架构师
梯度下降者6 天前
二、自动化运维架构师的三大核心能力
ci/cd·架构师·自动化运维·iac·平台工程
Java爱好狂.10 天前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
Java爱好狂.16 天前
挑战一周速通Spring+SpringBoot+SpringCloud!
java·后端·spring·springboot·架构师·java面试·java程序员
Java爱好狂.16 天前
Java小白如何三天速通redis?
java·数据库·redis·架构师·分布式锁·java面试·java程序员
rolt17 天前
[重写]《软件方法》全流程引领AI第1章-1.3为什么要使用标准建模语言(202610更新)
软件工程·产品经理·架构师·uml·本体·fde