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

设置,执行,一样的

相关推荐
JosieBook1 小时前
【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
架构
.生产的驴2 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
丁总学Java2 小时前
ARM 架构(Advanced RISC Machine)精简指令集计算机(Reduced Instruction Set Computer)
arm开发·架构
ZOMI酱4 小时前
【AI系统】GPU 架构与 CUDA 关系
人工智能·架构
天天扭码11 小时前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
余生H11 小时前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer
凡人的AI工具箱11 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang