







 1
1
 00:00:00,040 --> 00:00:02,640
 今天我们来说一下分层架构
2
 00:00:04,310 --> 00:00:06,730
 我经常看到一些文章
3
 00:00:06,740 --> 00:00:10,390
 或者是在开发团队里面看到
4
 00:00:10,400 --> 00:00:12,940
 有开发人员说,分层架构
5
 00:00:12,950 --> 00:00:15,370
 是DDD提出来的
6
 00:00:15,580 --> 00:00:17,570
 是领域驱动设计提出来的
7
 00:00:19,450 --> 00:00:20,280
 是不是这样的
8
 00:00:21,630 --> 00:00:26,460
 大家可以用这个关键词
9
 00:00:26,550 --> 00:00:31,100
 例如,DDD提出分层之类的或领域驱动设计
10
 00:00:31,110 --> 00:00:32,260
 提出分层之类的
11
 00:00:32,900 --> 00:00:37,750
 去搜微信的公众号也好
12
 00:00:37,760 --> 00:00:42,240
 搜百度Google都可以
13
 00:00:44,050 --> 00:00:49,370
 它就会有,DDD提出什么之类的
14
 00:00:51,530 --> 00:00:57,120
 就有些像,比如说,我们一些歌曲
15
 00:00:58,600 --> 00:01:01,620
 有的人他可能没听过以前的原唱
16
 00:01:02,250 --> 00:01:03,090
 他听的翻唱
17
 00:01:03,830 --> 00:01:06,510
 他就以为翻唱是原唱
18
 00:01:07,220 --> 00:01:08,670
 这种很多
19
 00:01:08,680 --> 00:01:10,710
 因为他懂得少
20
 00:01:12,520 --> 00:01:15,080
 所以他知识就是错误的
21
 00:01:16,640 --> 00:01:20,050
 我们来看一下分层架构的问题
22
 00:01:23,100 --> 00:01:24,180
 包括Eric Evans自己
23
 00:01:24,190 --> 00:01:27,240
 他也没有说提出什么之类的
24
 00:01:27,250 --> 00:01:29,960
 他只是很平淡地说了一下
25
 00:01:30,730 --> 00:01:31,970
 如果说他自己认为
26
 00:01:31,980 --> 00:01:35,340
 这是他自己的创新的一个东西
27
 00:01:35,350 --> 00:01:36,410
 提出来什么的
28
 00:01:36,680 --> 00:01:38,250
 他肯定会很大的篇幅
29
 00:01:38,970 --> 00:01:41,610
 或者比较着重地来说一下这个问题
30
 00:01:41,620 --> 00:01:43,840
 他没有说,那说明什么
31
 00:01:45,730 --> 00:01:48,980
 他肯定认为这个在他这个书里面来说
32
 00:01:48,990 --> 00:01:53,950
 就不是一个他自己的东西
33
 00:01:55,900 --> 00:01:58,610
 但是我们很多开发人员,这个书里面有这个
34
 00:01:58,980 --> 00:02:01,280
 所以是他提出的,胡说八道的
35
 00:02:01,700 --> 00:02:05,500
 而且你看,他这里给出了一些引用的文献
36
 00:02:05,510 --> 00:02:05,860
 对吧
37
 00:02:05,870 --> 00:02:13,060
 比如说,Buschmann1996年
38
 00:02:13,350 --> 00:02:17,550
 说的就是这本书,原书是96年出版的
39
 00:02:17,680 --> 00:02:22,690
 POSA,面向模式的软件体系结构
40
 00:02:22,700 --> 00:02:25,290
 或者说面向模式的软件架构
41
 00:02:27,070 --> 00:02:29,780
 这套书已经一共出了5卷
42
 00:02:30,900 --> 00:02:32,370
 这个是第1卷了
43
 00:02:32,580 --> 00:02:38,110
 里面就介绍了层这个架构模式
44
 00:02:39,780 --> 00:02:42,530
 专门用比较大的篇幅来介绍
45
 00:02:45,230 --> 00:02:47,310
 但实际上Evans这里的话
46
 00:02:47,320 --> 00:02:48,620
 96年
47
 00:02:48,630 --> 00:02:52,580
 还有另外的,像Martin Fowler
48
 00:02:54,080 --> 00:02:55,990
 Fowler发布了分析模式
49
 00:02:57,410 --> 00:03:02,740
 它里面也有一章专门来介绍架构模式的
50
 00:03:02,750 --> 00:03:03,980
 分层架构模式的
51
 00:03:05,590 --> 00:03:07,270
 而且Fowler书里面
52
 00:03:07,280 --> 00:03:12,510
 他说,20世纪70年代就提出来了
53
 00:03:13,170 --> 00:03:13,610
 54
 00:03:15,850 --> 00:03:17,140
 肯定比这个要早得多
55
 00:03:21,120 --> 00:03:23,430
 Fowler后来在03年的时候
56
 00:03:23,600 --> 00:03:28,370
 刚才分析模式96年,03年的时候
57
 00:03:28,380 --> 00:03:33,080
 他在他的企业用架构模式这个书里面
58
 00:03:33,330 --> 00:03:34,920
 他就专门第一章就说了
59
 00:03:34,930 --> 00:03:37,390
 一个整章来说分层的问题
60
 00:03:39,560 --> 00:03:41,190
 这个企业应用架构模式
61
 00:03:41,320 --> 00:03:43,470
 我们最近正在重新审校
62
 00:03:43,720 --> 00:03:48,400
 我们审校里面内容,改一些地方
63
 00:03:49,000 --> 00:03:51,040
 把一些有错的纠正掉
64
 00:03:51,530 --> 00:03:53,310
 然后出一个新的中译本
65
 00:03:54,890 --> 00:03:56,360
 应该年底能够出来
66
 00:03:59,120 --> 00:04:03,000
 或者我们小时候,指的是我们刚毕业的时候
67
 00:04:03,890 --> 00:04:06,170
 98年,你看,我97年开始工作
68
 00:04:07,980 --> 00:04:12,120
 我第一个工作,第一个职业阶段
69
 00:04:12,130 --> 00:04:13,680
 用的开发工具
70
 00:04:14,820 --> 00:04:16,980
 就是VB,Visual Basic
71
 00:04:17,400 --> 00:04:18,710
 从VB4.0 
72
 00:04:18,720 --> 00:04:19,910
 16位的
73
 00:04:19,920 --> 00:04:22,150
 VB4.0用到VB6.0
74
 00:04:23,430 --> 00:04:24,670
 最熟悉的书
75
 00:04:24,680 --> 00:04:26,870
 就类似这种书,是我们经常看的了
76
 00:04:27,470 --> 00:04:28,220
 当时
77
 00:04:28,230 --> 00:04:30,500
 也没有什么Google什么之类,没有的
78
 00:04:31,280 --> 00:04:34,260
 网络上什么面向 Google编程
79
 00:04:34,270 --> 00:04:37,060
 ctrl c,ctrl v没有de1
80
 00:04:37,350 --> 00:04:41,560
 有什么,MSDN光盘
81
 00:04:43,300 --> 00:04:45,580
 当时人家寄过来一堆光盘
82
 00:04:46,100 --> 00:04:47,910
 很多,人家不要钱一样
83
 00:04:48,040 --> 00:04:49,550
 给你撒光盘
84
 00:04:51,110 --> 00:04:53,830
 然后把光盘放到电脑里面看,这样的
85
 00:04:53,840 --> 00:04:57,670
 你以为说有一个网络,没有
86
 00:04:58,050 --> 00:05:00,400
 没有了,你要搜你的光盘,要么就看书
87
 00:05:00,410 --> 00:05:03,640
 书厚厚的一本,小时候看的书
88
 00:05:03,730 --> 00:05:06,270
 你看,三层架构
89
 00:05:09,250 --> 00:05:15,120
 你看,VB5,97年出的书,就是三层结构
90
 00:05:19,240 --> 00:05:23,730
 当然分层架构有很多种变体了
91
 00:05:24,150 --> 00:05:27,440
 对于我们企业的这种应用来说
92
 00:05:28,090 --> 00:05:31,310
 有很多变体,这种变体的话怎么来的
93
 00:05:31,320 --> 00:05:33,230
 可以,比如说,添加层
94
 00:05:33,880 --> 00:05:34,290
 95
 00:05:34,670 --> 00:05:36,320
 三层,你可以添加层
96
 00:05:37,540 --> 00:05:41,010
 在表示跟这个领域之间
97
 00:05:41,020 --> 00:05:43,440
 你可以加一个视图模型
98
 00:05:44,300 --> 00:05:48,880
 就是相当于把这种展示的把它先有个结构
99
 00:05:50,040 --> 00:05:54,650
 还有你不能直接调用这个领域类
100
 00:05:54,660 --> 00:05:56,010
 你要有一个应用服务
101
 00:05:56,770 --> 00:05:58,440
 然后在这里,数据访问之间
102
 00:05:58,450 --> 00:05:59,920
 你添加一个数据映射层
103
 00:06:02,360 --> 00:06:05,860
 第二个变体来源就是说添加抽象来解耦
104
 00:06:06,830 --> 00:06:14,780
 比如说A依赖于B,我可以怎么,依赖一个IB
105
 00:06:14,790 --> 00:06:17,690
 IB就是一个接口
106
 00:06:17,700 --> 00:06:18,810
 或者是一个抽象类
107
 00:06:19,340 --> 00:06:21,780
 然后B继承
108
 00:06:21,790 --> 00:06:23,350
 或者实现IB
109
 00:06:24,800 --> 00:06:29,180
 表面上看起来好像原来的依赖关系
110
 00:06:29,190 --> 00:06:30,540
 就被解耦了
111
 00:06:31,780 --> 00:06:33,370
 当然这个就不多说了
112
 00:06:33,380 --> 00:06:35,760
 什么控制反转
113
 00:06:36,090 --> 00:06:38,130
 还有什么依赖注入等等
114
 00:06:39,950 --> 00:06:41,100
 就是说这些东西
115
 00:06:42,950 --> 00:06:44,350
 所以就很多变体
116
 00:06:47,080 --> 00:06:48,430
 但是不管怎么变体的话
117
 00:06:48,440 --> 00:06:49,630
 有一个是不变的
118
 00:06:49,640 --> 00:06:50,790
 你怎么分也好
119
 00:06:52,560 --> 00:06:54,600
 最开始之所以分层的目的
120
 00:06:54,610 --> 00:06:57,960
 就是要这个,领域逻辑要独立
121
 00:06:58,970 --> 00:07:00,720
 你怎么变体来说
122
 00:07:00,730 --> 00:07:03,810
 这个是不能够出问题的