根據(jù)《從零開始學架構》課程整理和摘要
0、我的理解
架構懂扼,就是框架結構禁荸,比如蓋一棟房子的鋼筋框架即是架構,軟件架構即是軟件的整體的結構性的東西阀湿,一棟房屋的結構決定了房屋結不結實赶熟、大體外觀、能不能滿足居住要求陷嘴;同樣軟件架構決定了整個軟件是不是高可用的映砖、性能好不好、能不能解決現(xiàn)實的問題灾挨。
1邑退、系統(tǒng)
問題:
1、架構和框架有什么區(qū)別劳澄?
2地技、Linux有架構、mysql有架構秒拔、JVM架構乓土、使用這些系統(tǒng)開發(fā)的業(yè)務系統(tǒng)也有架構。應該關注什么架構溯警?
3、微信整體有架構狡相、微信登錄系統(tǒng)也有架構梯轻、支付系統(tǒng)也有架構,我們談微信架構的時候尽棕,主要談什么架構喳挑?
為了理解架構的概念,文中先梳理了幾個核心而又相似概念。
軟件架構有時候也叫系統(tǒng)架構伊诵,那么系統(tǒng)是什么单绑?作者提出幾個系統(tǒng)定義的關鍵內(nèi)容:
1、關聯(lián)
系統(tǒng)是由一組有關聯(lián)的個體組成曹宴,比如車輪子搂橙、方向盤、車架組成了騎車笛坦。沒有關聯(lián)的個體放在一起不能稱為一個系統(tǒng)区转。
2、規(guī)則
系統(tǒng)內(nèi)個體需要按照指定的規(guī)則運行版扩,而不是各自為政废离。規(guī)則規(guī)定了系統(tǒng)內(nèi)個體的分工和寫作方式。
如:汽車發(fā)動機負責產(chǎn)生動力礁芦,然后通過變速器和傳動軸將動力輸出到車輪子上蜻韭,從而驅(qū)動汽車前進。
3柿扣、能力
系統(tǒng)能力與個體能力有差別肖方,系統(tǒng)能力不是各個個體能力之和,二是產(chǎn)生了新的能力窄刘。
如:汽車能夠載重前行窥妇,而它的部件顯然不具備這種能力。
子系統(tǒng)定義:子系統(tǒng)也是由一組關聯(lián)的個體組成娩践,根據(jù)特定規(guī)則運行活翩,完成單個個體不能完成的工作。
通過這個定義你也可以了解到翻伺,其實系統(tǒng)和子系統(tǒng)只是看的視角不同材泄,一個系統(tǒng)從更大的系統(tǒng)來看它就是個子系統(tǒng);比如:
1吨岭、微信本身是個系統(tǒng)拉宗,它包括聊天、登錄辣辫、支付旦事、朋友圈等子系統(tǒng)。
2急灭、朋友圈這個系統(tǒng)又包括動態(tài)姐浮、評論、點贊子系統(tǒng)葬馋。
3卖鲤、評論這個系統(tǒng)可能又可以分為防刷子系統(tǒng)肾扰、審核子系統(tǒng)、存儲子系統(tǒng)蛋逾、
4集晚、評論子系統(tǒng)可能不能進一步劃分了,而是包括各個模塊或組件区匣,模塊或組件又是另外一個維度的系統(tǒng)偷拔,比如MySQL、Redis等是存儲子系統(tǒng)沉颂、但不是業(yè)務子系統(tǒng)条摸。
2、模塊與組件
這兩個概念常容易混淆铸屉、主要兩者的定義不好理解钉蒲,模塊和組件都是系統(tǒng)的組成部分,只是從不同的角度來拆分系統(tǒng)而已彻坛。
從邏輯角度來拆分顷啼、得到的就是模塊;從物理角度來拆分昌屉,得到的單元就是組件钙蒙。
劃分模塊的目的是為了職責分離、劃分組件的目的是為了單元復用间驮。組件在英文中為componet翻譯成中文也有零件的意思钳垮,零件比較好理解惜姐,獨立且可替換病蛉。
(到這里面讓我想到了我們常畫的圖汽烦,有時候是模塊與組件混合,還是沒有理解這兩個概念造成的屹篓,對于設計文檔來說疙渣,我們以模塊為單元畫架構圖合適,對于外部的介紹堆巧,用組件構成的架構圖更合適)
以一個網(wǎng)站系統(tǒng)來說妄荔,假設做一個學生信息管理系統(tǒng)。這個系統(tǒng)從邏輯角度來說谍肤,可以分為登錄注冊模塊啦租、個人信息模塊、個人成績模塊荒揣;從物理角度來拆分刷钢,可以拆分為Nginx、Web服務器乳附、MySQL内地。
3、框架和架構
框架和架構也是相似的概念赋除,而兩者具有較強的聯(lián)系阱缓。
軟件的框架(software framework)通常指為了實現(xiàn)業(yè)界的標準或完成特定的基本任務的軟件組件組件規(guī)范、也指為了實現(xiàn)軟件組件規(guī)范時举农,提供規(guī)范要求的基礎功能的軟件產(chǎn)品荆针。
關鍵部分:
1、框架是組件規(guī)范: 比如MVC是常見的軟件開發(fā)規(guī)范颁糟、類似還有MVP航背、MVVM、J2EE框架棱貌。
2玖媚、框架提供基礎功能產(chǎn)品::例如Spring MVC是MVC的開發(fā)框架、除了滿足MVC的規(guī)范要求婚脱、Spring還提供了許多基礎功能來幫助我們實現(xiàn)功能今魔,包括注解、等許多基礎功能障贸。
軟件架構指軟件系統(tǒng)的“基礎結構”错森、創(chuàng)建這些結構的準則、以及對這些結構的描述篮洁。
框架關注的是規(guī)范涩维,架構關注的是結構、框架的英文是Framework袁波,架構的英文是Architecture瓦阐。
實際工作中,常聽到似是而非的說法锋叨,比如我們系統(tǒng)是MVC架構垄分、我們系統(tǒng)基于SSH框架開發(fā)的等。
存在這個問題原因是娃磺,在架構中基礎結構沒有明確定義薄湿。
還是以學生系統(tǒng)為例,以邏輯結構劃分如下:
物理部署架構:
從開發(fā)角度來說偷卧,采用MVC架構如下:
4、重新定義架構
參考維基百科的定義听诸,我將架構重新定義為:軟件架構指軟件系統(tǒng)的頂層結構坐求。
這個定義看似很簡單,但包含的信息很豐富晌梨,基本上把系統(tǒng)桥嗤、子系統(tǒng)须妻、模塊、組件泛领、架構等概念都串起來了荒吏,我來詳細解釋一下。
首先渊鞋,“系統(tǒng)是一群關聯(lián)個體組成”绰更,這些“個體”可以是“子系統(tǒng)”“模塊”“組件”等;架構需要明確系統(tǒng)包含哪些“個體”锡宋。
其次儡湾,系統(tǒng)中的個體需要“根據(jù)某種規(guī)則”運作,架構需要明確個體運作和協(xié)作的規(guī)則执俩。
第三徐钠,維基百科定義的架構用到了“基礎結構”這個說法,我改為“頂層結構”奠滑,可以更好地區(qū)分系統(tǒng)和子系統(tǒng)丹皱,避免將系統(tǒng)架構和子系統(tǒng)架構混淆在一起導致架構層次混亂。