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
设置,执行,一样的