网易首页 > 网易号 > 正文 申请入驻

架构设计本质:系统与子系统、模块与组件、框架与架构

0
分享至

  在实际工作中,程序员会分很多种,有的擅长编码实现,有的擅长底层原理,有的擅长逻辑实现等等,在各自的领域都表现不俗、担当核心,然而,面临更高层架构设计时,很多优秀的程序员却折戟沙场,未能完成华丽转身。

  架构的真谛是什么呢?架构真的如此难把控吗?难道真的只有天资聪慧、天赋异能的程序员才能驾驭架构吗?

不要气馁,平常心,其实人人都是架构师,可能你做的任一一件事已无形中用到了架构。

  本篇文章将带您慢慢走进架构,揭秘架构的真谛。正如,架构不是神秘物,吸取真谛即了然。

  - 架构的背景 -

  如果想要深入理解某一事物的本质,最好的方式就是去追寻这个事物出现的历史背景和推动因素。所以我们先来梳理一下软件开发的进化史,探索一下软件架构出现的历史背景。

  1、机器语言

  最早的软件开发使用的是“机器语言”,其直接使用二进制码0和1来表示机器可以识别的指令和数据。

  比如:为了完成“将寄存器 BX 的内容送到 AX 中”,机器语言如下:

  1000100111011000

  面对上面的1&0的字符串,不用多说,程序员心里肯定会万马奔腾吧,更别说输入错误要去定位问题,求程序员的心里阴影面积?

  归纳一下,机器语言的主要问题是三难:

太难写、太难读、太难改!

2、汇编语言

  为了解决机器语言编写、阅读、修改复杂的问题,汇编语言应运而生。汇编语言又叫“符号语言”,用助记符代替机器指令的操作码,用地址符号(Symbol)或标号(Label),代替指令或操作数的地址。

  比如:为了完成“将寄存器 BX 的内容送到 AX 中”,汇编语言如下:

  mov ax,bx

  相比机器语言来说,汇编语言就清晰得多了。汇编语言虽然解决了机器语言读写复杂的问题,但本质上还是面向机器的,因为写汇编语言需要我们精确了解计算机底层的知识。

  面向机器的语言,带来的问题就是:

汇编语言需要针对不同 CPU 的汇编指令和结构,代码编写多份。

3、高级语言

  为了解决汇编语言的问题,前辈们又设计出了一个“高级语言”。为什么会叫“高级语言”呢?原因在于这些语言让程序员不需要关注机器底层的低级结构和指令,只需要关注具体的问题和业务即可。

  比如:以4+6=?这个加法为例,如果用Lisp语言,只需要简单一行代码:

  (+ 4 6)

  除此以外,通过编译程序的处理,高级语言可以被编译为适合不同CPU指令的机器语言。程序员只要写一次程序,就可以在不同的机器上编译运行,无须根据不同的机器指令重写整个程序。

  
4、两次软件危机

  第一次软件危机与结构化程序设计

  高级语言的出现,解放了程序员,但好景不长,随着软件的规模和复杂度的大大增加,软件质量低下,质量把控难度高,项目无法如期完成,严重超支等现象。例如,1963 年美国的 水手一号火箭发射失败事故,就是因为一行 FORTRAN 代码错误导致的。

  所以,为了解决上面的问题,针对性的提出了解决方法“软件工程”,虽然“软件工程”提出之后也曾被视为软件领域的银弹,但后来事实证明,软件工程同样无法根除软件危机,只能在一定程度上缓解软件危机。

  差不多同一时间,“结构化程序设计” 作为另外一种解决软件危机的方案被提了出来。结构化程序设计的主要特点是抛弃 goto 语句,采取“自顶向下、逐步细化、模块化”的指导思想。

结构化程序设计本质上还是一种面向过程的设计思想,但通过“自顶向下、逐步细化、模块化”的方法,将软件的复杂度控制在一定范围内,从而从整体上降低了软件开发的复杂度。

  第二次软件危机与面向对象

  结构化编程的风靡在一定程度上缓解了软件危机,然而随着硬件的快速发展,业务需求越来越复杂,以及编程应用领域越来越广泛,第二次软件危机很快就到来了。

  第二次软件危机的根本原因还是 在于软件生产力远远跟不上硬件和业务的发展。

第一次软件危机的根源在于 软件的“逻辑”变得非常复杂; 第二次软件危机主要体现在 软件的“扩展”变的非常复杂。

  结构化程序设计虽然能够缓解软件逻辑的复杂性,但是对于业务变化带来的软件扩展却无能为力。软件领域迫切希望找到新的银弹来解决软件危机,在这种背景下,面向对象的思想开始流行起来。

  虽然面向对象开始也被当做解决软件危机的银弹,在一定程度上解决了软件“扩展”带来的复杂性。但事实证明,和软件工程、结构化程度设计一样,面向对象也不是银弹,而只是一种新的软件方法而已。

  
5、软件架构的产生

  与之前的各种新方法或者新理念不同的是,“软件架构”出现的背景并不是整个行业都面临类似相同的问题,“软件架构”也不是为了解决新的软件危机而产生的,这是怎么回事呢?

  随着软件系统规模的增加,计算相关的算法和数据结构不再构成主要的设计问题。当系统由许多部分组成时,整个系统的组织,也就是所说的“软件架构”,产生了一系列新的设计问题。比如:

系统规模庞大,内部耦合严重,开发效率低; 系统耦合严重,牵一发动全身,后续修改和扩展困难; 系统逻辑复杂,容易出问题,出问题后很难排查和修复;

  “软件架构”的出现有其历史必然性。第一次软件危机引出了“结构化编程”,创造了“模块”概念;第二次软件危机引出了“面向对象编程”,创造了“对象”概念;直到“软件架构”的产生,创造了“组件”概念。

“模块”、“对象”和“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。

  - 架构指什么 -

  对于技术人员来说,“架构”是一个再常见不过的词了。当提起“架构”这个词时,如果去深究一下:“架构”到底指什么?大部分人也许并不一定能够准确地回答。1000个人心中可能有1001种架构的含义。

  那么如何才能准确的理解架构呢?理解架构首先理解三个有关系而又相似的概念,包括:系统与子系统、模块与组件、框架与架构。

  
1、系统与子系统

  关于“系统”的定义,我们先来看维基百科的定义:

系统泛指由一群 有关联 的个体组成,根据某种 规则运作,能完成 个别元件不能单独完成的工作的群体。它的意思是“总体”、“整体”或“联盟”。

  来提炼下里面的关键信息:

关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统,例如:把一个发动机和一台PC放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车。 规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如:汽车发动机负责产生动力,然后通过变速器和传动轴,将动力输出到轮胎上,从而驱动汽车前进。 能力:系统能力和个体能力有本质的差别,系统能力也不是个体能力之和,而是产生了新的能力。例如:汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力。

  再来看下子系统的定义:

子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。

  其实子系统和系统的定义是一样的,只是观察的角度有差异,一个系统可能是另外一个更大系统的子系统。

  按照这个定义,系统和子系统比较容易理解。以微信为例来做一个分析:

微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统; 朋友圈这个系统又包括动态、评论、点赞等子系统; 评论这个系统可能又包括防刷子系统、审核子系统、发布子系统、存储子系统等; 评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统,例如:MySQL、Redis等存储系统,但不是业务子系统。

2、模块与组件

  从逻辑的角度来拆分系统,得到的单元就是“模块”;从物理的角度来拆分系统,得到的单元就是“组件”。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。其实,“组件”的英文“component”也可以翻译成中文的“零件”一词,“零件”更容易理解一些,“零件”是一个物理的概念,并且具备“独立且可替换”的特点。

  
3、框架与架构

  单纯从定义的角度来看,框架关注的是“规范”,架构关注的是“结构”。框架的英文是“Framework”,架构的英文是“Architecture”。

  我们经常会说,比如:“工程采用的是MVC架构”、“工程使用的是SSH框架”等。所以,第一句话是站在结构的层面来说明,第二句话是站在规范的层面来说明。

  同时,如果是以不同的角度来说明结构,会得出不同的架构描述,比如:

  从业务逻辑的角度分解,“学生管理系统”的架构:

  “学生管理系统”的架构

  从物理部署的角度分解,“学生管理系统”的架构:

  “学生管理系统”的架构

  从开发结构的角度分解,“学生管理系统”的架构:

  “学生管理系统”的架构

  
4、重新定义架构

软件架构指软件系统的顶层结构。

  首先,“系统是一群关联个体组成”,这些“个体”可以是“子系统”、“模块”、“组件”等;架构需要明确系统包含哪些“个体”。

  其次,系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则。

  - 总结 -

  架构其实就是为了应对软件系统复杂度而提出的解决方案。架构关键思维即为判断与取舍。

  正如,在一个有约束的盒子里去求解或接近最合适的解。这个约束的盒子可能会包含团队经验、成本、资源、时间、业务阶段等因素掺杂在一起的综合体,针对这个综合体,分析出系统架构的复杂度,进行合适的判断与取舍,从而设计出恰当的架构用在合适的软件系统中。

作者:猿码架构 来源: https://www.jianshu.com/p/312af3e8b94a

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
范冰冰在国外终于时髦一回!把破洞黑衣也穿上身,太能省布料了!

范冰冰在国外终于时髦一回!把破洞黑衣也穿上身,太能省布料了!

蓓小西
2024-07-02 15:20:09
内娱唯一配享太庙的明星夫妻,拥有全网独一份塌房赦免权?

内娱唯一配享太庙的明星夫妻,拥有全网独一份塌房赦免权?

新氧
2024-07-01 11:31:52
北大同届考生坚称李雪琴舞弊,本人花8万买假证,曝详细舞弊过程

北大同届考生坚称李雪琴舞弊,本人花8万买假证,曝详细舞弊过程

古希腊掌管月桂的神
2024-07-03 16:59:42
周华健与美国妻子被嘲像母子:结婚38年,一直被劝离

周华健与美国妻子被嘲像母子:结婚38年,一直被劝离

蓝钻故事
2024-07-03 10:28:17
英国人:北京地铁的秩序印度无法模仿,印度网民:这肯定搞错了

英国人:北京地铁的秩序印度无法模仿,印度网民:这肯定搞错了

妮子说美食
2024-07-03 23:36:03
上海一小区“平改坡”14年后又要“坡改平”?居民:我怎么不知道?

上海一小区“平改坡”14年后又要“坡改平”?居民:我怎么不知道?

新民晚报
2024-07-03 10:21:07
杭州试行停车按分钟收费引发热议,什么样的委员能提出如此提案?

杭州试行停车按分钟收费引发热议,什么样的委员能提出如此提案?

童童聊娱乐啊
2024-07-03 21:53:27
人由206块骨头组成,而中国人只有204块,缺的地方很独特

人由206块骨头组成,而中国人只有204块,缺的地方很独特

今日养生之道
2024-07-03 07:30:14
我国特高压要被取代了?美国发明超导输电,预计2026年大规模试点

我国特高压要被取代了?美国发明超导输电,预计2026年大规模试点

嘿哥哥科技
2024-07-02 22:59:29
住建部宣布,已查清全国住房数量,楼市或将迎来一场全新的变革?

住建部宣布,已查清全国住房数量,楼市或将迎来一场全新的变革?

如烟财道
2024-07-03 13:33:47
世上“绿茶”千万万,最怕袁咏仪这种,原来我们被骗了十几年

世上“绿茶”千万万,最怕袁咏仪这种,原来我们被骗了十几年

十原故里
2024-07-01 12:39:19
蔡磊夫妇,“翻车”了,直播镜头后的蔡磊,藏不住了?

蔡磊夫妇,“翻车”了,直播镜头后的蔡磊,藏不住了?

李昕言温度空间
2024-06-05 14:54:34
回顾:20年“新冠吹哨人”李文亮离世后,妻子如今生活过的怎样

回顾:20年“新冠吹哨人”李文亮离世后,妻子如今生活过的怎样

琪琪故事记
2024-07-01 08:37:37
医生泄露患者隐私,上海市东方医院:暂停其医疗工作,配合调查

医生泄露患者隐私,上海市东方医院:暂停其医疗工作,配合调查

上观新闻
2024-07-03 20:30:09
不是西班牙,不是德国,欧洲杯头号热门诞生:8亿豪门露出冠军相

不是西班牙,不是德国,欧洲杯头号热门诞生:8亿豪门露出冠军相

小火箭爱体育
2024-07-03 15:49:40
德国姑娘远嫁中国,三年后回家探亲母亲痛哭,直言:为什么要骗我

德国姑娘远嫁中国,三年后回家探亲母亲痛哭,直言:为什么要骗我

阿裤趣闻君
2024-07-02 14:57:55
泽连斯基严厉斥责特朗普,并准备与特朗普会面

泽连斯基严厉斥责特朗普,并准备与特朗普会面

亡海中的彼岸花
2024-07-04 00:30:02
消息人士:上期国足多人带伤入选 伊万助手对个别球员伤病感疑惑

消息人士:上期国足多人带伤入选 伊万助手对个别球员伤病感疑惑

直播吧
2024-07-04 08:49:13
周鹏担任深圳队主帅兼队员!沈梓捷和顾全都忍不住说出心里话

周鹏担任深圳队主帅兼队员!沈梓捷和顾全都忍不住说出心里话

懂球哥评球
2024-07-03 15:23:51
大疆涉足电助力自行车:推DJI Avinox电助力系统 支持30秒鸡血模式

大疆涉足电助力自行车:推DJI Avinox电助力系统 支持30秒鸡血模式

快科技
2024-07-03 16:49:17
2024-07-04 10:32:49
IT架构师联盟
IT架构师联盟
IT架构实战分享
695文章数 7653关注度
往期回顾 全部

科技要闻

三折卖“问界”撇清关系,华为这买卖值吗

头条要闻

中金女员工离世受关注 券业"一哥"去年人均薪酬近80万

头条要闻

中金女员工离世受关注 券业"一哥"去年人均薪酬近80万

体育要闻

我不用当体育老师了,我去踢欧洲杯了!

娱乐要闻

刘亦菲唐嫣深夜晒照,美女贴贴好养眼

财经要闻

理想裁员闹笑话,蔚来裁员闹风波?

汽车要闻

巴黎4S店价格对比 同款车型中国售价打对折

态度原创

健康
数码
房产
公开课
军事航空

人类为何至今无法攻克渐冻症?

数码要闻

华为手环 8 获推鸿蒙 HarmonyOS 4.2.0.103:新增支持数字车钥匙

房产要闻

海南楼市第二轮新政潮开启!这次救市的药,来得更猛!

公开课

连中三元是哪三元?

军事要闻

美空军研发第六代战机陷入资金困境

无障碍浏览 进入关怀版