[图解]企业应用架构模式2024新译本讲解15-行数据入口

1
00:00:01,060 --> 00:00:02,770
数据算完了

2
00:00:03,070 --> 00:00:07,720
接下来就是我们这一节的主要内容了

3
00:00:08,500 --> 00:00:13,630
应用服务调用第三方的,Email

4
00:00:13,640 --> 00:00:18,280
包括集成应用的接口来发Email

5
00:00:18,290 --> 00:00:20,080
或者发布到集成应用上面

6
00:00:20,090 --> 00:00:26,300
我们来看

7
00:00:26,530 --> 00:00:30,430
它首先获取一个

8
00:00:31,000 --> 00:00:31,950
Email的入口

9
00:00:32,590 --> 00:00:36,170
然后调用它的发Email的操作

10
00:00:37,250 --> 00:00:41,360
我们来看第一个,获取入口

11
00:00:42,770 --> 00:00:44,390
是应用服务这里定义的

12
00:00:45,030 --> 00:00:46,160
你看它的返回类型

13
00:00:46,430 --> 00:00:48,500
注意这里是一个接口类型

14
00:00:49,510 --> 00:00:53,510
这里,也就是说

15
00:00:54,170 --> 00:00:58,060
它只是依赖于接口类型的对象

16
00:00:58,920 --> 00:01:02,720
至于你具体的下面是哪个具体类型来实现

17
00:01:03,930 --> 00:01:05,520
你可以灵活变化

18
00:01:06,980 --> 00:01:12,240
所以这个里面的话就留下了变化的空间

19
00:01:13,990 --> 00:01:14,870
我们前面讲了

20
00:01:14,880 --> 00:01:17,310
通过泛化来达到这点变化

21
00:01:17,320 --> 00:01:20,100
就是绝大多数面向对象

22
00:01:21,040 --> 00:01:22,840
这些什么技巧

23
00:01:22,850 --> 00:01:24,040
说来说去就这样一个

24
00:01:24,480 --> 00:01:25,780
前面已经说过好几遍了

25
00:01:27,000 --> 00:01:27,760
返回

26
00:01:30,400 --> 00:01:32,220
好,有了这个

27
00:01:32,580 --> 00:01:36,330
然后就调用它发送Email的操作

28
00:01:36,460 --> 00:01:37,490
我们看参数

29
00:01:39,020 --> 00:01:42,800
参数有一个两个三个,代表了什么

30
00:01:43,370 --> 00:01:46,330
Email的地址

31
00:01:46,720 --> 00:01:49,120
Email的主题

32
00:01:49,530 --> 00:01:53,690
这个是Email的内容

33
00:01:55,150 --> 00:01:58,040
在这里,你看地址,主题,内容

34
00:02:00,010 --> 00:02:01,640
这几个从哪里来的

35
00:02:01,650 --> 00:02:09,340
就是从合同这个表

36
00:02:10,230 --> 00:02:12,100
数据表

37
00:02:12,110 --> 00:02:13,670
返回数据表的第一行

38
00:02:15,020 --> 00:02:16,460
各个字段里面来的

39
00:02:17,370 --> 00:02:21,660
这里面来的

40
00:02:22,890 --> 00:02:25,270
当然这里只是模拟发Email了

41
00:02:25,280 --> 00:02:26,670
把它写到控制台

42
00:02:26,760 --> 00:02:28,030
没有说真正发Email

43
00:02:30,700 --> 00:02:31,900
好,Email发出去了

44
00:02:32,150 --> 00:02:33,300
同样第二个一样

45
00:02:33,310 --> 00:02:36,780
获取入口,调用,一样的

46
00:02:38,070 --> 00:02:40,460
也是同样的,返回是接口类型

47
00:02:42,980 --> 00:02:47,890
发布这里有点区别

48
00:02:47,900 --> 00:02:52,610
你看这里,它参数放了一行进来

49
00:02:53,420 --> 00:02:59,610
放了一个数据行作为参数

50
00:03:01,190 --> 00:03:03,480
表示可以有不同的做法

51
00:03:05,330 --> 00:03:07,490
然后就把这一行作为参数放进来

52
00:03:07,500 --> 00:03:09,940
然后取里面字段

53
00:03:09,950 --> 00:03:10,980
ID、字段

54
00:03:11,720 --> 00:03:13,760


55
00:03:14,770 --> 00:03:15,640
两个字段

56
00:03:21,100 --> 00:03:21,810
这样来

57
00:03:23,550 --> 00:03:24,540
好,这是计算

58
00:03:25,380 --> 00:03:27,290
所以,这里面

59
00:03:27,660 --> 00:03:29,410
他在计算操作里面

60
00:03:29,420 --> 00:03:31,200
加了两个内容

61
00:03:31,510 --> 00:03:32,700
一个是发Email

62
00:03:33,030 --> 00:03:38,100
一个是发布到第三方的应用

63
00:03:40,060 --> 00:03:40,970
后面都一样了

64
00:03:40,980 --> 00:03:43,490
后面查询我们前面已经见过了

65
00:03:44,120 --> 00:03:47,290
就不多说了,一样的

66
00:03:47,300 --> 00:03:51,650
你看,这里面,一一模一样

67
00:03:52,740 --> 00:03:56,620
我们就

68
00:03:57,010 --> 00:03:59,950
你看这里,查出来,累计

69
00:04:00,410 --> 00:04:00,960
一样的

70
00:04:02,920 --> 00:04:10,450
好,我们直接继续了

71
00:04:10,860 --> 00:04:13,490
继续之后,你看我们这里

72
00:04:13,980 --> 00:04:19,500
发Email的内容,这是查询内容

73
00:04:20,940 --> 00:04:22,220
发布内容

74
00:04:22,230 --> 00:04:25,470
查询内容

75
00:04:32,230 --> 00:04:34,380


76
00:04:35,040 --> 00:04:38,840
发Email,发布,查询结果

77
00:04:39,510 --> 00:04:41,020


78
00:04:41,110 --> 00:04:42,580


79
00:04:43,300 --> 00:04:43,730
这样来

1
00:00:00,440 --> 00:00:04,640
下一个模式,我们要说的是行数据入口

2
00:00:05,500 --> 00:00:08,160
前面那个领域模式

3
00:00:08,520 --> 00:00:10,720
领域层的模式已经说完了

4
00:00:11,440 --> 00:00:13,750
接下来是数据源架构模式

5
00:00:13,760 --> 00:00:15,190
我们挑一些来讲

6
00:00:17,890 --> 00:00:20,800
前面我们讲事务脚本的时候说过

7
00:00:21,170 --> 00:00:22,480
表数据入口

1
00:00:01,720 --> 00:00:02,920
表数据入口

2
00:00:02,930 --> 00:00:05,520
是一个对象

3
00:00:05,530 --> 00:00:08,170
就搞定一个表里面所有行

4
00:00:10,430 --> 00:00:11,430
而行数据入口

5
00:00:11,440 --> 00:00:14,010
就是每个对象

6
00:00:14,020 --> 00:00:16,220
就模拟数据库里面

7
00:00:16,230 --> 00:00:20,260
某个表里面的一行

8
00:00:20,270 --> 00:00:23,450
也就是说,一行一个对象

9
00:00:24,190 --> 00:00:29,700
显然,你有多少行,我们要访问

10
00:00:30,950 --> 00:00:33,320
我们就要多少个对象

11
00:00:34,030 --> 00:00:36,890
相当于在内存里面

12
00:00:36,900 --> 00:00:37,930
提供一个

13
00:00:38,990 --> 00:00:41,230
数据库里面行的一个模拟

14
00:00:42,130 --> 00:00:46,010
也就是说,它的结构

15
00:00:47,650 --> 00:00:50,880
跟数据库里面

16
00:00:51,650 --> 00:00:53,560
一行里面的结构是一样的

17
00:00:56,630 --> 00:00:59,140
它的目的主要是,跟前面的入口一样

18
00:00:59,230 --> 00:01:03,550
入口的目的,就是说,负责转换

19
00:01:04,480 --> 00:01:10,140
把前面的请求转成相应的数据的请求

20
00:01:13,120 --> 00:01:19,350
然后通过它来屏蔽数据源的访问细节

21
00:01:21,650 --> 00:01:25,840
特别是如果你有不同的数据源的时候

22
00:01:26,700 --> 00:01:28,470
或者数据源会变化的时候

23
00:01:30,920 --> 00:01:38,860
这个里面只会有插入、更新

24
00:01:38,870 --> 00:01:40,220
删除这样的逻辑

25
00:01:41,900 --> 00:01:44,320
它不能有领域逻辑

26
00:01:45,180 --> 00:01:46,030
如果有领域逻辑

27
00:01:46,040 --> 00:01:49,630
那就变成下我们下面要讲的另外一个模式

28
00:01:49,800 --> 00:01:51,710
就是活动记录那个模式了

29
00:01:52,920 --> 00:01:56,480
把领域逻辑跟数据访问逻辑

30
00:01:56,490 --> 00:02:00,000
混在同一个类里面

31
00:02:00,910 --> 00:02:05,370
相当于把入口,行入口

32
00:02:05,380 --> 00:02:09,360
这个类,Person入口这个类和

33
00:02:09,910 --> 00:02:13,480
Person类两个绑在一起

34
00:02:13,570 --> 00:02:14,920
两个都累加在一起

35
00:02:15,010 --> 00:02:16,520
变成一个活动记录

36
00:02:18,620 --> 00:02:22,570
那是后面的我们还会讲的

37
00:02:27,150 --> 00:02:31,990
所以,你要它是一行一个对象

38
00:02:32,120 --> 00:02:36,480
所以你要把它申请的对象

39
00:02:36,490 --> 00:02:39,950
它就配这样一个,单独给它配

40
00:02:40,160 --> 00:02:43,360
每一个单独,每个类或每个表

41
00:02:43,490 --> 00:02:46,200
单独配一个查找器

42
00:02:48,990 --> 00:02:57,090
然后把入口的对象给生成,加载数据

43
00:02:57,100 --> 00:02:59,090
然后生成入口的对象

44
00:03:05,800 --> 00:03:09,940
如果有这种元数据映射的代码生成

45
00:03:10,610 --> 00:03:12,020
那么这个入口本身

46
00:03:12,960 --> 00:03:17,230
它可以大批量

47
00:03:17,240 --> 00:03:18,310
通过自动化

48
00:03:18,320 --> 00:03:19,670
映射来生成

49
00:03:20,310 --> 00:03:22,840
不需要我们一个个这样一遍遍写

50
00:03:25,100 --> 00:03:28,530
我们后面讲到元数据映射模式的时候

51
00:03:29,050 --> 00:03:29,850
再说这个问题

52
00:03:32,600 --> 00:03:34,060
显然,这个也是配合

53
00:03:35,160 --> 00:03:36,800
面向过程的事务脚本

54
00:03:36,930 --> 00:03:39,120
跟前面的表数据入口一样

55
00:03:40,090 --> 00:03:47,800
如果是领域模型

56
00:03:47,810 --> 00:03:51,660
面向对象,配合就是映射器模式了

57
00:03:57,380 --> 00:03:58,330
我们来看案例

58
00:03:59,560 --> 00:04:04,170
这个案例跟之前的案例就不一样了

59
00:04:04,180 --> 00:04:06,130
它是换了一个

60
00:04:06,140 --> 00:04:09,060
书上就换了一个人员管理的案例

61
00:04:09,150 --> 00:04:10,900
就一个很简单的表

62
00:04:10,910 --> 00:04:12,140
人员表

63
00:04:14,460 --> 00:04:22,470
然后主键,ID、姓、名

64
00:04:22,560 --> 00:04:26,860
然后这个是他的家属

65
00:04:27,400 --> 00:04:28,510
家属的数量

66
00:04:30,580 --> 00:04:32,460
依赖于他的那些人的数量

67
00:04:32,670 --> 00:04:40,070
所以后面会有一个说谁是负责人

68
00:04:41,640 --> 00:04:43,270
有多少人靠着你吃饭

69
00:04:43,280 --> 00:04:47,640
你就是那个家的主人

70
00:04:48,250 --> 00:04:50,720
主人或者负责人

71
00:04:52,220 --> 00:04:53,410
有多少人依赖你

72
00:04:53,420 --> 00:04:55,290
家属和下属都可以

73
00:05:02,540 --> 00:05:05,440
同样的,这个案例来源

74
00:05:05,450 --> 00:05:08,150
我们也是用网络上

75
00:05:08,160 --> 00:05:14,350
有一家用C#复刻的案例一样的

76
00:05:16,480 --> 00:05:21,630
类图,入口类

77
00:05:22,190 --> 00:05:30,470
它继承了一个基入口

78
00:05:30,810 --> 00:05:32,490
但一会我们看代码会看到

79
00:05:32,500 --> 00:05:34,910
它里面也没干什么

80
00:05:35,360 --> 00:05:38,790
就是有一个ID是在这里面定义的

81
00:05:39,310 --> 00:05:42,000
就是说,由超类来控制ID

82
00:05:42,640 --> 00:05:45,190
所有的子类不管你什么ID

83
00:05:45,860 --> 00:05:49,230
就是说,都是用超类那里的ID

84
00:05:53,080 --> 00:05:57,460
然后下面,它这里用一个注册表

85
00:05:58,280 --> 00:06:02,590
来存放PersonsMap

86
00:06:03,040 --> 00:06:08,790
里面有一个集合,里面有个词典

87
00:06:08,800 --> 00:06:14,140
里面有很多人员入口的对象

88
00:06:16,100 --> 00:06:17,910
然后查找器

89
00:06:18,000 --> 00:06:20,470
查找器这里来查找

90
00:06:20,480 --> 00:06:22,820
给它ID

91
00:06:22,830 --> 00:06:27,610
然后返回一个人员入口的对象

92
00:06:28,930 --> 00:06:35,240
也可以查找哪些是负责人

93
00:06:35,960 --> 00:06:38,250
多了一个这个

94
00:06:38,260 --> 00:06:41,650
这都是书上给出了代码的片段

95
00:06:41,820 --> 00:06:47,520
然后复刻成了完整的代码

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值