[图解]企业应用架构模式2024新译本讲解14-服务层2

1

00:00:01,070 --> 00:00:01,820

我们来看案例

2

00:00:02,600 --> 00:00:06,620

案例也同样是之前跟事务脚本

3

00:00:07,030 --> 00:00:09,400

领域模型等等用过的案例是一样的

4

00:00:10,480 --> 00:00:12,700

这里译文改了一些

5

00:00:16,200 --> 00:00:20,430

应用服务类在这里

6

00:00:21,080 --> 00:00:22,990

我们看它的命名

7

00:00:23,530 --> 00:00:24,590

我们往往是以

8

00:00:26,110 --> 00:00:28,510

实际上就相当于我们分析类里面的控制类

9

00:00:31,720 --> 00:00:33,040

用用例的名字来命名

10

00:00:34,140 --> 00:00:40,080

这个在事务脚本里面已经见到过了

11

00:00:40,690 --> 00:00:42,920

只不过事务脚本的时候

12

00:00:42,930 --> 00:00:45,630

说的重点在事务脚本上面

13

00:00:45,930 --> 00:00:50,170

现在我们说的是服务类的上面

14

00:00:51,860 --> 00:01:01,200

可以说,泛化一个抽象的应用服务类

15

00:01:02,030 --> 00:01:06,030

同样,这些具体的这些的话也可以泛化

16

00:01:06,040 --> 00:01:14,020

但这里面的话它就直接,这个就是什么

17

00:01:14,030 --> 00:01:19,540

这个就是接口了

18

00:01:19,860 --> 00:01:21,090

刚刚说错了

19

00:01:21,100 --> 00:01:22,330

这个就是接口了

20

00:01:22,340 --> 00:01:25,190

一会我们看后面的

21

00:01:25,200 --> 00:01:27,200

书上

22

00:01:27,210 --> 00:01:28,560

还有更细的图

23

00:01:29,790 --> 00:01:31,660

这个的话有点冲突

24

00:01:31,830 --> 00:01:33,580

跟我们后面演示的代码冲突

25

00:01:33,590 --> 00:01:34,620

后面的演示代码的话

26

00:01:37,000 --> 00:01:41,060

这个名字是描述实现接口的类的

27

00:01:41,660 --> 00:01:43,420

接口应该有个I在这里

28

00:01:43,680 --> 00:01:47,450

前面有个I,这个的话

29

00:01:47,460 --> 00:01:49,090

他就把这个标成接口

30

00:01:49,630 --> 00:01:56,160

意思就是说,这个类它依赖的是接口

31

00:01:56,370 --> 00:01:57,280

后面的实现

32

00:01:57,290 --> 00:02:00,930

包括Email怎么发

33

00:02:00,940 --> 00:02:03,660

还有后面的第三方应用

34

00:02:03,670 --> 00:02:05,260

怎么样发布到那里去

35

00:02:06,320 --> 00:02:09,000

由实现类里面来写

36

00:02:11,410 --> 00:02:13,430

我们来看这个案例

37

00:02:13,950 --> 00:02:15,270

同样的,来源

38

00:02:15,280 --> 00:02:17,790

也是跟我们前面的来源是一样的

39

00:02:18,830 --> 00:02:23,870

这是类图,你看,这个就要多几个类

40

00:02:24,040 --> 00:02:26,420

你看,刚才这个类在这里

41

00:02:27,090 --> 00:02:30,370

刚才这个类把它说是接口

42

00:02:30,620 --> 00:02:32,920

这里单独分成一个接口

43

00:02:34,420 --> 00:02:35,420

这个是实现它

44

00:02:35,430 --> 00:02:39,130

这个也是

45

00:02:41,060 --> 00:02:44,260

你看这多了一个I,II看起来有点

46

00:02:44,270 --> 00:02:48,180

两个I

47

00:02:49,330 --> 00:02:52,610

一个是电子邮件的接口

48

00:02:52,620 --> 00:02:55,810

一个是集成应用的接口

49

00:02:55,820 --> 00:02:57,470

也就是说,这里面

50

00:02:58,600 --> 00:03:03,470

它就添加了一点点应用的逻辑

51

00:03:03,600 --> 00:03:06,380

就是说,前面收入确认这些东西

52

00:03:06,590 --> 00:03:07,720

我们前面讲

53

00:03:07,730 --> 00:03:09,280

用一个领域模型什么

54

00:03:09,660 --> 00:03:10,760

都可以封装了

55

00:03:12,140 --> 00:03:15,360

但是它这里加了一个内容,就是说

56

00:03:15,370 --> 00:03:19,530

算完之后发一个邮件

57

00:03:20,870 --> 00:03:21,850

显然,发邮件

58

00:03:22,020 --> 00:03:25,460

就不能跟之前

59

00:03:25,670 --> 00:03:27,420

产品合同这些类混在一起了

60

00:03:27,430 --> 00:03:27,660

对吧

61

00:03:28,650 --> 00:03:29,330

这是一个

62

00:03:29,340 --> 00:03:30,010

第二个

63

00:03:31,000 --> 00:03:34,610

并用一个面向消息的中间件来发布消息

64

00:03:35,110 --> 00:03:37,060

通知其他已集成的应用

65

00:03:39,920 --> 00:03:43,450

显然这是另外一个领域的内容

66

00:03:45,550 --> 00:03:47,660

跟合同、产品

67

00:03:48,230 --> 00:03:49,620

这个不是一个领域的

68

00:03:50,480 --> 00:03:54,950

所以不能够混在一起

69

00:03:59,000 --> 00:04:04,350

所以在这个地方定义了两个入口

70

00:04:05,500 --> 00:04:07,140

入口的类,这个一样

71

00:04:08,560 --> 00:04:11,830

管理数据库连接,DbManager

72

00:04:12,800 --> 00:04:13,870

这是主程序

73

00:04:14,740 --> 00:04:18,280

然后同样这是一个入口的类

74

00:04:19,830 --> 00:04:22,920

定义了数据库的访问

75

00:04:23,290 --> 00:04:28,500

表数据入口,跟事务脚本里面的一样,没有区别

76

00:04:30,630 --> 00:04:33,300

这是类图,我们来看序列图

77

00:04:34,620 --> 00:04:37,830

序列图,你看,它这里就比较多了

78

00:04:37,920 --> 00:04:42,960

对象在这里,很多个

79

00:04:42,970 --> 00:04:49,200

1234567

80

00:04:49,210 --> 00:04:52,370

这里你看,Email的入口

81

00:04:52,770 --> 00:04:55,450

这是集成应用的入口

82

00:04:56,230 --> 00:04:59,060

上面算完了

83

00:04:59,520 --> 00:05:01,960

这下面发Email,发布到集成应用

84

00:05:03,730 --> 00:05:07,080

在这里,我们看一下

85

00:05:09,330 --> 00:05:11,010

工具上,更清楚一点

86

00:05:11,020 --> 00:05:12,690

工具上字体不太好看

87

00:05:12,980 --> 00:05:16,170

但是更清楚,序列图

88

00:05:19,410 --> 00:05:20,090

类图在这里

89

00:05:21,800 --> 00:05:30,310

序列图,这是应用服务类

90

00:05:30,760 --> 00:05:31,840

91

00:05:31,850 --> 00:05:33,800

92

00:05:45,050 --> 00:05:45,140

这里

93

00:05:46,710 --> 00:05:48,850

创建了一个电子邮件入口

94

00:05:49,390 --> 00:05:49,950

然后

95

00:05:58,500 --> 00:06:01,860

里面让它发送电子邮件信息

96

00:06:03,560 --> 00:06:06,550

同样的,下面一个集成应用的入口

97

00:06:08,180 --> 00:06:14,560

然后这里发布到集成应用

98

00:06:15,380 --> 00:06:20,910

涉及到的类是比较多的

99

00:06:21,330 --> 00:06:27,440

100

00:06:29,510 --> 00:06:34,730

有8个类来协作

101

00:06:35,950 --> 00:06:37,760

我们来看一下它的代码

1

00:00:00,730 --> 00:00:01,890

这是代码

2

00:00:03,660 --> 00:00:04,730

我们看主程序

3

00:00:06,390 --> 00:00:08,420

同样,我们这里也加了一些注释

4

00:00:09,510 --> 00:00:14,260

我们逐步逐句运行

5

00:00:32,620 --> 00:00:35,290

这里面,也是跟前面事务脚本一样

6

00:00:35,300 --> 00:00:39,370

用了一个SQLite的数据库

7

00:00:40,210 --> 00:00:42,280

我们前面说过了,就不再说了

8

00:00:44,850 --> 00:00:49,550

首先DbManager

9

00:00:52,070 --> 00:00:54,590

用DbManager来创建数据库连接

10

00:00:55,350 --> 00:00:59,130

这里把它放到一个using的块里面来

11

00:00:59,390 --> 00:01:03,590

意思是确保它在使用之后能够被释放

12

00:01:03,760 --> 00:01:07,150

一旦这个代码块结束之后

13

00:01:07,590 --> 00:01:09,480

它就会被释放掉

14

00:01:13,060 --> 00:01:15,890

那么这个就跳到DbManager这里了

15

00:01:16,580 --> 00:01:17,970

前面跟事务脚本一样了

16

00:01:18,260 --> 00:01:24,750

这个一样,数据源,一样的,就不多说了

17

00:01:24,760 --> 00:01:25,670

打开连接

18

00:01:26,950 --> 00:01:29,680

然后创建一个Command对象

19

00:01:29,930 --> 00:01:31,480

数据库命令对象

20

00:01:32,480 --> 00:01:35,930

然后设置命令的SQL语句

21

00:01:36,480 --> 00:01:39,230

SQL语句就是如果这个表存在的话

22

00:01:39,240 --> 00:01:40,870

就清空,这几步就是

23

00:01:42,450 --> 00:01:45,330

把数据库里面的内容给建立起来了

24

00:01:46,580 --> 00:01:47,850

有的话就清空

25

00:01:49,380 --> 00:01:51,210

设置,执行,一样的

相关推荐
58沈剑8 小时前
80后聊架构:架构设计中两个重要指标,延时与吞吐量(Latency vs Throughput) | 架构师之路...
架构
想进大厂的小王10 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
阿伟*rui11 小时前
认识微服务,微服务的拆分,服务治理(nacos注册中心,远程调用)
微服务·架构·firefox
ZHOU西口12 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
deephub14 小时前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
架构师那点事儿15 小时前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文
W Y17 小时前
【架构-37】Spark和Flink
架构·flink·spark
Gemini199518 小时前
分布式和微服务的区别
分布式·微服务·架构
Dann Hiroaki1 天前
GPU架构概述
架构
茶馆大橘1 天前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel