当前位置: 首页 > news >正文

[图解]企业应用架构模式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
就判断在不在里面就行了

相关文章:

  • 欧拉openEuler 22.03 LTS-部署k8sv1.03.1
  • 【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(6)
  • ESP32之arduino环境安装及点灯
  • CentOS中使用SSH远程登录
  • 【华为战报】5月、6月HCIP考试战报!
  • Flink实现准确和高效流处理的关键问题
  • Keycloak SSO 如何验证已添加的 SPN 是否生效
  • 3个让你爽到爆炸的学习工具
  • IP地址配置
  • 解决跨域问题(vite、axios/koa)
  • el-dropdown的command方法添加自定义参数
  • 【项目实践】贪吃蛇
  • N-gram算法的pytorch代码实现
  • CPU的核心数和线程数
  • C语言 | Leetcode C语言题解之第213题打家劫舍II
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • express.js的介绍及使用
  • JavaScript 基本功--面试宝典
  • leetcode46 Permutation 排列组合
  • SegmentFault 2015 Top Rank
  • Vue学习第二天
  • 阿里云购买磁盘后挂载
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • ------- 计算机网络基础
  • 如何利用MongoDB打造TOP榜小程序
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 原生js练习题---第五课
  • 主流的CSS水平和垂直居中技术大全
  • elasticsearch-head插件安装
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #php的pecl工具#
  • (CPU/GPU)粒子继承贴图颜色发射
  • (rabbitmq的高级特性)消息可靠性
  • (办公)springboot配置aop处理请求.
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (一)RocketMQ初步认识
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (正则)提取页面里的img标签
  • (转)一些感悟
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ./configure,make,make install的作用
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net Stream篇(六)
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .Net接口调试与案例
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @Autowired 与@Resource的区别
  • @GlobalLock注解作用与原理解析
  • @KafkaListener注解详解(一)| 常用参数详解
  • @property @synthesize @dynamic 及相关属性作用探究
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试