1.系統(tǒng)與子系統(tǒng)
系統(tǒng)泛指由一群有關(guān)聯(lián)的個(gè)體組成,根據(jù)某種規(guī)則運(yùn)作,能完成個(gè)別元件不能單獨(dú)完成的工作的群體。它的意思是“總體”“整體”或“聯(lián)盟”。
關(guān)聯(lián):系統(tǒng)是由一群有關(guān)聯(lián)的個(gè)體組成的,沒(méi)有關(guān)聯(lián)的個(gè)體堆在一起不能成為一個(gè)系統(tǒng)。例如,把一個(gè)發(fā)動(dòng)機(jī)和一臺(tái) PC 放在一起不能稱之為一個(gè)系統(tǒng),把發(fā)動(dòng)機(jī)、底盤(pán)、輪胎、車(chē)架組合起來(lái)才能成為一臺(tái)汽車(chē)。
規(guī)則:系統(tǒng)內(nèi)的個(gè)體需要按照指定的規(guī)則運(yùn)作,而不是單個(gè)個(gè)體各自為政。規(guī)則規(guī)定了系統(tǒng)內(nèi)個(gè)體分工和協(xié)作的方式。例如,汽車(chē)發(fā)動(dòng)機(jī)負(fù)責(zé)產(chǎn)生動(dòng)力,然后通過(guò)變速器和傳動(dòng)軸,將動(dòng)力輸出到車(chē)輪上,從而驅(qū)動(dòng)汽車(chē)前進(jìn)。
能力:系統(tǒng)能力與個(gè)體能力有本質(zhì)的差別,系統(tǒng)能力不是個(gè)體能力之和,而是產(chǎn)生了新的能力。例如,汽車(chē)能夠載重前進(jìn),而發(fā)動(dòng)機(jī)、變速器、傳動(dòng)軸、車(chē)輪本身都不具備這樣的能力。
子系統(tǒng)也是由一群有關(guān)聯(lián)的個(gè)體所組成的系統(tǒng),多半會(huì)是更大系統(tǒng)中的一部分。
以微信為例,可以看出他們的關(guān)系

2.模塊與組件
軟件模塊(Module)是一套一致而互相有緊密關(guān)連的軟件組織。它分別包含了程序和數(shù)據(jù)結(jié)構(gòu)兩部分?,F(xiàn)代軟件開(kāi)發(fā)往往利用模塊作為合成的單位。模塊的接口表達(dá)了由該模塊提供的功能和調(diào)用它時(shí)所需的元素。模塊是可能分開(kāi)被編寫(xiě)的單位。這使它們可再用和允許人員同時(shí)協(xié)作、編寫(xiě)及研究不同的模塊。
軟件組件定義為自包含的、可編程的、可重用的、與語(yǔ)言無(wú)關(guān)的軟件單元,軟件組件可以很容易被用于組裝應(yīng)用程序中。
模塊:從邏輯的角度來(lái)拆分系統(tǒng)后的單元,目的是:職責(zé)分離
組件:從物理的角度來(lái)拆分系統(tǒng)后的單元,目的是:?jiǎn)卧獜?fù)用(可以理解為零件)
學(xué)生管理系統(tǒng)從模塊劃分:
學(xué)生管理系統(tǒng)從組件劃分:
3. 框架與架構(gòu)
軟件框架(Software framework)通常指的是為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范,也指為了實(shí)現(xiàn)某個(gè)軟件組件規(guī)范時(shí),提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品。
框架是組件規(guī)范,框架提供基礎(chǔ)功能的產(chǎn)品
軟件架構(gòu)指軟件系統(tǒng)的“基礎(chǔ)結(jié)構(gòu)”,創(chuàng)造這些基礎(chǔ)結(jié)構(gòu)的準(zhǔn)則,以及對(duì)這些結(jié)構(gòu)的描述。
從定義的角度來(lái)看,框架和架構(gòu)的區(qū)別還是比較明顯的,框架關(guān)注的是“規(guī)范”,架構(gòu)關(guān)注的是“結(jié)構(gòu)”??蚣艿挠⑽氖?Framework,架構(gòu)的英文是 Architecture。
采用不同的角度或者維度,可以將系統(tǒng)劃分為不同的結(jié)構(gòu)
-
從業(yè)務(wù)邏輯的角度分解,“學(xué)生管理系統(tǒng)”的架構(gòu)是:
1.png -
從物理部署的角度分解,“學(xué)生管理系統(tǒng)”的架構(gòu)是:
2.png
- 從開(kāi)發(fā)規(guī)范的角度分解,“學(xué)生管理系統(tǒng)”可以采用標(biāo)準(zhǔn)的 MVC 框架來(lái)開(kāi)發(fā),因此架構(gòu)又變成了 MVC 架構(gòu):

4.總結(jié)
架構(gòu):指軟件系統(tǒng)的頂層結(jié)構(gòu)。
首先,“系統(tǒng)是一群關(guān)聯(lián)個(gè)體組成”,這些“個(gè)體”可以是“子系統(tǒng)”“模塊”“組件”等;架構(gòu)需要明確系統(tǒng)包含哪些“個(gè)體”。
其次,系統(tǒng)中的個(gè)體需要“根據(jù)某種規(guī)則”運(yùn)作,架構(gòu)需要明確個(gè)體運(yùn)作和協(xié)作的規(guī)則。
第三,維基百科定義的架構(gòu)用到了“基礎(chǔ)結(jié)構(gòu)”這個(gè)說(shuō)法,我改為“頂層結(jié)構(gòu)”,可以更好地區(qū)分系統(tǒng)和子系統(tǒng),避免將系統(tǒng)架構(gòu)和子系統(tǒng)架構(gòu)混淆在一起導(dǎo)致架構(gòu)層次混亂。
5.注:
架構(gòu)是頂層設(shè)計(jì);
框架是面向編程或配置的半成品;
組件是從技術(shù)維度上的復(fù)用;
模塊是從業(yè)務(wù)維度上職責(zé)的劃分;
系統(tǒng)是相互協(xié)同可運(yùn)行的實(shí)體。
框架是規(guī)矩,架構(gòu)是按照規(guī)矩做規(guī)劃。
系統(tǒng)是學(xué)校,子系統(tǒng)是班級(jí),
模塊是學(xué)生老師,
組件是課桌椅。

