1
00:00:00,220 --> 00:00:03,010
接下来,我们就要进入模式的讲解了
2
00:00:04,030 --> 00:00:05,940
这个是书里面的目录
3
00:00:06,230 --> 00:00:08,140
按照
4
00:00:08,150 --> 00:00:09,220
领域逻辑模式
5
00:00:09,230 --> 00:00:10,580
数据源架构模式
6
00:00:11,010 --> 00:00:12,450
对象-关系行为模式
7
00:00:12,460 --> 00:00:13,530
对象-关系结构模式
8
00:00:13,700 --> 00:00:14,730
后面还有很多
9
00:00:19,040 --> 00:00:24,460
我们把这个内容用类图、对象图建模出来
10
00:00:24,470 --> 00:00:25,620
你看,这个是类图
11
00:00:26,800 --> 00:00:30,210
这类图,左边这个
12
00:00:30,220 --> 00:00:33,350
模式类型就是这个标题
13
00:00:33,360 --> 00:00:34,870
领域逻辑
14
00:00:35,450 --> 00:00:38,890
数据源架构、对象-关系行为,对象-关系结构
15
00:00:38,900 --> 00:00:43,730
还有后面其他的,这叫模式类型
16
00:00:44,960 --> 00:00:47,840
然后模式就是这个了
17
00:00:48,430 --> 00:00:50,020
下面事务脚本
18
00:00:50,030 --> 00:00:51,740
领域模型、表模块
19
00:00:52,120 --> 00:00:57,490
服务层、表数据入口,就这么两个类
20
00:00:58,650 --> 00:01:01,090
如果这个还可以再分多层类型
21
00:01:01,100 --> 00:01:02,530
那就在哪里,就这里了
22
00:01:03,380 --> 00:01:07,170
这里搞自反关联
23
00:01:07,620 --> 00:01:08,250
24
00:01:08,930 --> 00:01:12,170
这个我们大家都知道了
25
00:01:12,900 --> 00:01:16,830
前面的课程已经说过很多遍了
26
00:01:18,500 --> 00:01:20,050
右边那个是对象图
27
00:01:20,060 --> 00:01:25,860
你看,模式类型这个类有这些对象,领域逻辑
28
00:01:25,870 --> 00:01:26,660
数据源架构
29
00:01:29,830 --> 00:01:33,060
这是Martin Fowler的分类了
30
00:01:38,200 --> 00:01:40,480
那么我们就会挑一些来讲了
31
00:01:41,070 --> 00:01:42,350
因为前面也讲了
32
00:01:42,360 --> 00:01:43,550
因为内容比较多
33
00:01:44,330 --> 00:01:45,400
不可能都讲
34
00:01:45,410 --> 00:01:47,310
我们挑一些来讲
35
00:01:48,620 --> 00:01:53,920
第一个讲的就是事务脚本和表数据入口
36
00:01:55,420 --> 00:01:56,810
这两个的结合
37
00:01:58,470 --> 00:02:06,140
事务脚本是领域逻辑模式的一个了
38
00:02:08,000 --> 00:02:09,800
它的类型是领域逻辑
39
00:02:10,410 --> 00:02:14,850
而表数据入口,类型是数据源架构
40
00:02:16,950 --> 00:02:19,150
相当于一个是在领域层
41
00:02:19,320 --> 00:02:23,390
一个是在数据层
42
00:02:23,400 --> 00:02:24,510
这两个结合起来
43
00:02:25,480 --> 00:02:26,680
完成我们的任务
44
00:02:28,790 --> 00:02:32,970
首先我们来看一下这两个模式的定义
1
00:00:01,130 --> 00:00:03,570
我们先来看事务脚本模式
2
00:00:05,960 --> 00:00:09,680
事务脚本,右边这个就是书上的截图了
3
00:00:10,010 --> 00:00:13,620
这些地方是这一次审校要修正的地方
4
00:00:15,070 --> 00:00:18,810
他说了,使用过程来组织业务逻辑
5
00:00:18,820 --> 00:00:22,290
每个过程处理来自表示层的单个请求
6
00:00:22,300 --> 00:00:25,130
就是说,界面那边过来的一个请求
7
00:00:26,310 --> 00:00:28,550
就把它做成一个事务脚本
8
00:00:32,110 --> 00:00:33,860
比如说,这个就是一个
9
00:00:35,560 --> 00:00:37,690
这个就是一个,界面过来
10
00:00:38,340 --> 00:00:40,510
也就是说,它对应的就是这里面的
11
00:00:40,800 --> 00:00:41,230
service
12
00:00:41,240 --> 00:00:44,660
就是应用的服务类了
13
00:00:45,160 --> 00:00:46,390
这里面一个操作
14
00:00:46,520 --> 00:00:50,650
就可以看作是一个事务脚本过程
15
00:00:51,640 --> 00:00:54,110
事务脚本这个词就是一个造词了
16
00:00:56,430 --> 00:00:57,420
Martin Fowler
17
00:00:57,430 --> 00:00:57,980
造出来的
18
00:00:58,340 --> 00:00:59,570
实际上是没有必要的
19
00:00:59,580 --> 00:01:01,990
就直接说面向过程就完了
20
00:01:02,000 --> 00:01:03,470
结果又造了一个词
21
00:01:04,600 --> 00:01:05,830
好像又是一个新概念
22
00:01:06,170 --> 00:01:07,500
有创新一样
23
00:01:07,510 --> 00:01:12,500
没有,反而是让人们有一种创新的感觉
24
00:01:12,510 --> 00:01:15,600
但是停滞不前,只是换了一个词而已
25
00:01:16,230 --> 00:01:17,200
这种就很不好
26
00:01:20,390 --> 00:01:21,620
如果你这个概念
27
00:01:21,630 --> 00:01:23,640
没有带来
28
00:01:24,420 --> 00:01:26,990
比以前更好的一个东西的话
29
00:01:27,000 --> 00:01:28,110
只是换了个名字
30
00:01:29,330 --> 00:01:32,790
就这个的话,相当于鸦片一样
31
00:01:33,530 --> 00:01:34,440
我是不赞成的
32
00:01:36,100 --> 00:01:41,850
这里说了,这个就直接调数据库
33
00:01:41,860 --> 00:01:45,010
或者通过一个比较瘦的
34
00:01:45,020 --> 00:01:48,860
或者比较薄的一个数据库包装器
35
00:01:50,210 --> 00:01:55,720
实际上就是刚才讲的表数据入口
36
00:01:59,910 --> 00:02:06,620
逻辑组织成单个过程,这里,事务脚本
37
00:02:10,640 --> 00:02:12,840
另外一个,就是刚才说的
38
00:02:12,850 --> 00:02:16,310
跟它配合的,表数据入口
39
00:02:19,110 --> 00:02:26,170
那么Gateway这个的话,有的翻译叫网关
40
00:02:26,180 --> 00:02:32,670
但是它不是
41
00:02:32,680 --> 00:02:36,820
网关是指网络上,用在网络上是网关
42
00:02:38,230 --> 00:02:40,000
这个本来是叫入口、关口
43
00:02:41,470 --> 00:02:46,290
网关是用在网络上的时候叫网关
44
00:02:46,300 --> 00:02:48,530
比如说,设备有网关设备
45
00:02:49,450 --> 00:02:51,970
但现在我们是用在数据访问上
46
00:02:52,180 --> 00:02:54,210
我们叫关口、入口就可以了
47
00:02:54,930 --> 00:02:56,690
结果有的人网关、网关
48
00:02:57,140 --> 00:02:59,220
相当于
49
00:03:00,860 --> 00:03:03,700
把先后顺序搞反了
1
00:00:00,340 --> 00:00:02,970
就像我们知道鼠标
2
00:00:06,590 --> 00:00:08,620
现在叫鼠标,英文叫Mouse
3
00:00:10,120 --> 00:00:12,110
Mouse以前是指老鼠
4
00:00:13,620 --> 00:00:18,130
鼠标一开始也不叫鼠标,发明是什么
5
00:00:18,480 --> 00:00:21,270
叫Engelbart就是恩格尔巴特
6
00:00:21,480 --> 00:00:24,020
就是斯坦福的一个教授
7
00:00:24,470 --> 00:00:26,100
后来到施乐公司
8
00:00:27,060 --> 00:00:31,060
他发明了,实际上那个东西叫轨迹球
9
00:00:31,830 --> 00:00:33,000
鼠标一开始是
10
00:00:33,010 --> 00:00:36,110
机械鼠标,它底部是一个球
11
00:00:37,470 --> 00:00:38,880
不像我们现在今天光电
12
00:00:39,330 --> 00:00:40,920
无线,不是这样的
13
00:00:40,930 --> 00:00:42,040
它是一个球
14
00:00:42,500 --> 00:00:46,310
然后手拿着这个球滚来滚去这样
15
00:00:48,070 --> 00:00:53,380
后来有人觉得它像老鼠,就叫Mouse,鼠标
16
00:00:55,210 --> 00:00:56,910
鼠标是后来的
17
00:00:57,400 --> 00:00:59,820
你不能说,因为你习惯于看到鼠标
18
00:00:59,830 --> 00:01:02,060
你看,我们现代人来说
19
00:01:02,450 --> 00:01:04,220
平时看到都是鼠标,对不对
20
00:01:04,230 --> 00:01:05,420
你见过老鼠吗
21
00:01:06,220 --> 00:01:07,620
很少有人见过老鼠
22
00:01:08,300 --> 00:01:13,800
除非你住的房子是比较老的房子
23
00:01:14,720 --> 00:01:17,910
农村什么的,乡下什么可以
24
00:01:17,920 --> 00:01:20,530
大城市老鼠很难找的
25
00:01:20,540 --> 00:01:25,170
不能说我平时见的都是鼠标
26
00:01:26,150 --> 00:01:30,070
没见过老鼠,所以我把老鼠叫鼠标
27
00:01:30,470 --> 00:01:31,340
不是这样的
28
00:01:35,780 --> 00:01:37,500
要分清楚哪个先哪个后
29
00:01:37,670 --> 00:01:39,060
所以我们这个叫入口
30
00:01:39,730 --> 00:01:41,320
如果说,你可以叫关口
31
00:01:42,540 --> 00:01:50,020
这个数据入口,是数据映射器
32
00:01:50,830 --> 00:01:52,620
这个模式,后面我们会再说
33
00:01:53,470 --> 00:01:55,630
普及之前,的普遍的做法
34
00:01:55,720 --> 00:02:00,460
我们“小时候”,职业生涯开始的时候
35
00:02:00,820 --> 00:02:04,090
就是通过这个,发过去
36
00:02:04,100 --> 00:02:06,050
然后返回一个记录集
37
00:02:06,740 --> 00:02:08,850
Recordset或者Resultset
38
00:02:09,480 --> 00:02:12,190
然后从记录集里面取字段
39
00:02:12,200 --> 00:02:14,790
然后干活
40
00:02:15,700 --> 00:02:20,460
类似于事务脚本+表数据入口
41
00:02:24,800 --> 00:02:27,110
这里的理由,为什么要这样一个入口
42
00:02:27,910 --> 00:02:28,710
他的理由是说
43
00:02:28,720 --> 00:02:33,870
在业务逻辑混杂SQL语句引起一些问题
44
00:02:34,860 --> 00:02:39,740
所以通过数据入口把这个SQL语句封装起来
45
00:02:39,830 --> 00:02:41,700
让外面的Service
46
00:02:42,460 --> 00:02:44,000
包括前面的表示层
47
00:02:44,950 --> 00:02:46,420
不需要接触到SQL
48
00:02:50,650 --> 00:02:51,600
但是的话
49
00:02:53,900 --> 00:02:58,160
你拿一个这个来放SQL语句
50
00:02:58,370 --> 00:03:00,050
SQL语句应该放在
51
00:03:00,060 --> 00:03:00,290
52
00:03:00,300 --> 00:03:02,010
SQL语句应该待的地方才对
53
00:03:02,330 --> 00:03:04,730
比如说,在DBMS那里
54
00:03:04,940 --> 00:03:06,290
在数据库管理系统那里
55
00:03:06,940 --> 00:03:09,170
作为存储过程存在,才对的
56
00:03:09,180 --> 00:03:10,370
你又把它放
57
00:03:10,380 --> 00:03:13,310
你这个要么用Java写
58
00:03:13,320 --> 00:03:15,510
要么用C#写
59
00:03:16,540 --> 00:03:18,690
然后你在C#、Java代码里面
60
00:03:20,010 --> 00:03:23,150
突然放上几个字符串,里面是SQL语句
61
00:03:23,690 --> 00:03:25,940
这个本身就已经是比较别扭的了
62
00:03:28,000 --> 00:03:29,630
下面我们来看一下案例