[图解]企业应用架构模式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

都会慢慢看到的

相关推荐
FreeLikeTheWind.2 天前
UML概述、类图关系及连接线表示
uml
傻傻虎虎5 天前
【真题笔记】21年系统架构设计师案例理论点总结
单例模式·系统架构·uml·命令模式
D@.6 天前
初学者指南:用例图——开启您的软件工程之旅
uml·贴图·用例图
rolt8 天前
长得像用例图的类图-《软件方法》8.2.3.4
软件工程·uml·面向对象
成工小白8 天前
【UML】- 用例图(结合银行案例解释其中的奥义)
uml·用例图
ftswsfb9 天前
【系统架构设计师】六、UML建模与架构文档化
系统架构·uml
rolt13 天前
[pdf,epub]105页《分析模式》漫谈合集01
ddd·架构师·uml·领域驱动设计·分析模式
Javatutouhouduan17 天前
Java程序员如何获得高并发经验?
java·分布式·后端·程序员·高并发·架构师
奶味少女酱~17 天前
uml类图
uml