[图解]企业应用架构模式2024新译本讲解04-表模块

1
00:00:01,400 --> 00:00:06,070
接下来,我们来看一下表模块这个模式了

2
00:00:07,380 --> 00:00:11,160
这个模式同样是

3
00:00:11,170 --> 00:00:13,600
领域逻辑类型的模式

4
00:00:16,030 --> 00:00:17,690
跟在事务脚本后面

5
00:00:23,330 --> 00:00:32,310
表模块,它的名字,你看,以表来组织的模块了

6
00:00:33,690 --> 00:00:36,290
你看它的定义,处理某一个数据库表

7
00:00:37,430 --> 00:00:39,420
不一定是表,也可以是视图

8
00:00:40,450 --> 00:00:44,960
所有行的业务逻辑的一个单一实例

9
00:00:45,890 --> 00:00:48,020
之前的译文都没有着重说单一

10
00:00:48,300 --> 00:00:50,310
因为原文它有个single

11
00:00:51,570 --> 00:00:54,490
所以单一实例

12
00:00:54,500 --> 00:00:55,810
也就是说一个实例

13
00:00:55,820 --> 00:00:58,290
处理所有的

14
00:00:59,820 --> 00:01:02,220
跟所有行相关的逻辑

15
00:01:04,700 --> 00:01:06,690
既然它只有一个实例的话

16
00:01:07,670 --> 00:01:08,460
意味着什么

17
00:01:08,950 --> 00:01:10,750
如果你要处理单行

18
00:01:10,760 --> 00:01:16,270
那就是得用ID这个参数了

19
00:01:19,450 --> 00:01:22,360
这点跟表数据入口是很类似的

20
00:01:23,340 --> 00:01:25,410
表数据入口也是一个实例处理

21
00:01:25,900 --> 00:01:27,860
一个表里面所有行,只不过它处理的

22
00:01:27,870 --> 00:01:30,640
是数据方面的逻辑

23
00:01:31,560 --> 00:01:35,430
而我们这个是领域逻辑,是业务逻辑

24
00:01:37,970 --> 00:01:38,920
这个表模块

25
00:01:38,930 --> 00:01:41,800
你看它名字,是跟实体类一模一样

26
00:01:44,280 --> 00:01:47,360
所以它会给人造成一种误解或错觉

27
00:01:47,370 --> 00:01:48,800
以为这个就是面向对象

28
00:01:49,970 --> 00:01:50,600
实际上不是

29
00:01:51,280 --> 00:01:55,660
你看,它这里面连属性都没有

30
00:01:56,510 --> 00:01:59,620
面向对象,它说行为跟属性结合

31
00:01:59,980 --> 00:02:01,230
有状态

32
00:02:02,070 --> 00:02:05,840
状态把这两个黏连起来

33
00:02:06,880 --> 00:02:09,040
你属性都没有,哪有什么状态

34
00:02:09,620 --> 00:02:11,400
所以它只是名字是这个而已

35
00:02:12,210 --> 00:02:14,590
实例化之后得到的一个对象

36
00:02:14,600 --> 00:02:17,190
也不是代表一个合同,而是什么

37
00:02:17,900 --> 00:02:19,190
代表一个合同表

38
00:02:19,880 --> 00:02:21,120
里面的所有的合同

39
00:02:22,430 --> 00:02:23,930
它不是一个合同对象

40
00:02:24,470 --> 00:02:26,380
所以它不管调用什么操作

41
00:02:26,390 --> 00:02:30,110
你看,ID ID ID ID,这里

42
00:02:30,120 --> 00:02:30,510
对吧

43
00:02:34,130 --> 00:02:38,370
所以它本质上还是面向过程

44
00:02:39,020 --> 00:02:40,020
不是面向对象

45
00:02:43,450 --> 00:02:45,440
这个跟事务脚本相比

46
00:02:47,020 --> 00:02:49,470
实际上就是把面向过程伪装了一下

47
00:02:50,300 --> 00:02:54,940
把它伪装成类似对象的形式

48
00:02:55,500 --> 00:02:57,830
面向过程就是我们前面事务脚本

49
00:02:58,210 --> 00:02:59,420
就是一个什么service

50
00:02:59,910 --> 00:03:01,230
然后里面一个个方法

51
00:03:01,240 --> 00:03:02,510
你看,这些方法

52
00:03:03,740 --> 00:03:04,840
这里,这个方法

53
00:03:06,000 --> 00:03:06,800
还有这些方法

54
00:03:08,140 --> 00:03:10,420
我们前面那个事务脚本都有,对吧

55
00:03:11,930 --> 00:03:14,000
只不过它是放在什么service里面

56
00:03:14,010 --> 00:03:19,550
而现在,装模作样地把它分到类里面去

57
00:03:20,120 --> 00:03:23,120
这个类,这个类,有个责任分配

58
00:03:23,990 --> 00:03:26,540
但实际上它还是面向对象(口误:过程)的

59
00:03:28,600 --> 00:03:30,490
只不过这里是把这个逻辑

60
00:03:30,620 --> 00:03:31,850
再按这个表

61
00:03:33,340 --> 00:03:35,220
或者是实体类分了一下组

62
00:03:36,750 --> 00:03:38,320
前面事务脚本也有分组

63
00:03:38,410 --> 00:03:40,280
可能是按用例、按主题

64
00:03:40,750 --> 00:03:42,100
主题实际上应该就类似于

65
00:03:42,110 --> 00:03:43,850
用例的一个集合了

66
00:03:44,110 --> 00:03:46,720
来分组

67
00:03:46,730 --> 00:03:49,430
而这里是按照类分组

68
00:03:52,460 --> 00:03:55,860
分组的时候操作要放到哪个类

69
00:03:57,640 --> 00:04:01,700
要看主要用到的数据

70
00:04:02,960 --> 00:04:06,470
如果这个操作用的数据

71
00:04:06,480 --> 00:04:09,270
是跟合同这个表里面数据有关的

72
00:04:10,060 --> 00:04:11,000
就放在合同里

73
00:04:12,000 --> 00:04:12,790
这个放在这里

74
00:04:12,800 --> 00:04:15,390
这个放这里,很可能意味着什么

75
00:04:16,420 --> 00:04:19,430
这里面用到的数据跟这个表有关

76
00:04:20,100 --> 00:04:24,140
这点倒是和面向对象的责任分配

77
00:04:24,470 --> 00:04:25,820
专家原则

78
00:04:26,150 --> 00:04:27,170
专家模式

79
00:04:27,180 --> 00:04:29,280
就是说,你分配的责任

80
00:04:29,290 --> 00:04:34,370
跟你拥有的资源是匹配的

81
00:04:34,540 --> 00:04:36,170
这个地方很相像

82
00:04:39,100 --> 00:04:42,390
这是我们的表模块的模式

1
00:00:01,140 --> 00:00:05,230
接下来,就是书里面的序列图了

2
00:00:06,840 --> 00:00:07,760
前面是类图

3
00:00:08,680 --> 00:00:12,300
这个序列图就展示了这个表模块

4
00:00:14,840 --> 00:00:16,900
还有表数据入口

5
00:00:17,950 --> 00:00:19,310
它们怎么协作的

6
00:00:21,220 --> 00:00:25,030
首先,这个表示层过来一个请求

7
00:00:25,920 --> 00:00:31,120
然后,它先通过表数据入口

8
00:00:31,130 --> 00:00:35,050
这个时候,这个表示层跟表数据入口

9
00:00:35,060 --> 00:00:36,730
是直接依赖的

10
00:00:36,860 --> 00:00:39,890
直接调用这个表数据入口

11
00:00:42,380 --> 00:00:43,430
然后,它这里

12
00:00:44,550 --> 00:00:47,500
由它来把数据库里面的数据

13
00:00:47,510 --> 00:00:49,620
组装成一个记录集

14
00:00:53,230 --> 00:00:58,130
然后再由这个表示,记录集返回到这里

15
00:00:58,140 --> 00:01:01,640
然后再由表示找这个表模块

16
00:01:01,770 --> 00:01:04,520
表模块这里属于业务层,或者领域层

17
00:01:05,940 --> 00:01:10,870
然后以记录集为参数创建表模块

18
00:01:10,880 --> 00:01:14,260
然后针对这个表模块

19
00:01:14,430 --> 00:01:19,940
调用它的一个领域逻辑的操作

20
00:01:20,600 --> 00:01:25,580
让它应用这个领域逻辑,这样的一个过程

21
00:01:26,340 --> 00:01:32,290
这里,记录集,我们在做数据库开发的时候

22
00:01:32,500 --> 00:01:33,770
特别是早年的时候

23
00:01:33,780 --> 00:01:35,890
没有用映射器的时候

24
00:01:36,660 --> 00:01:37,900
基本上都用到的

25
00:01:38,730 --> 00:01:40,690
实际上就是内存里面的一个

26
00:01:41,920 --> 00:01:44,780
把数据库的这种结构放在内存里面

27
00:01:44,990 --> 00:01:46,740
临时放置在内存里面

28
00:01:48,050 --> 00:01:50,200
而且还可以断开连接

29
00:01:50,210 --> 00:01:52,840
也不影响你记录集里面使用

30
00:01:52,930 --> 00:01:54,960
只要你这个程序没有终止

31
00:01:57,400 --> 00:02:02,090
记录集,是书里面的一个称呼了

32
00:02:02,540 --> 00:02:03,970
不同的平台的话

33
00:02:03,980 --> 00:02:06,230
它有的叫法不一样

34
00:02:06,520 --> 00:02:09,220
有的叫记录集

35
00:02:10,580 --> 00:02:11,980
有的叫结果集

36
00:02:11,990 --> 00:02:13,380
有的叫数据集

37
00:02:14,290 --> 00:02:16,060
都是差不多的

38
00:02:16,070 --> 00:02:18,020
当然微妙上会有些区别

39
00:02:18,780 --> 00:02:20,370
这个概念是差不多的

40
00:02:20,380 --> 00:02:25,400
比如说,这是.net平台上面的数据集

41
00:02:28,070 --> 00:02:31,420
一个数据集有若干个数据表

42
00:02:33,750 --> 00:02:35,750
然后这个表里面有很多行

43
00:02:36,570 --> 00:02:43,510
这是它的角色,也就是它定义的属性的名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值