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
这个是不能够出问题的