咱們在進行系統設計時,常常會容易混淆使用系統、子系統、架構、框架、模塊、組件等這些名詞,梳理這些與架構設計有個的概念,有助於咱們更好的進行系統設計。編程
1、系統與子系統
系統:根據維基百科定義,系統泛指由一羣有關聯的個體組成,根據某種規則運做,能完成個別元件不能單獨完成的工做的羣體。緩存
子系統:子系統是由一羣有關聯的個體所組成的系統,一般是更大系統中的一部分。微信
系統和子系統的概念相對比較容易理解,好比微信是個系統,聊天、朋友圈、公衆號就是它比較重要的三個子系統。數據結構
2、架構和框架
軟件架構:根據維基百科定義,架構是有關軟件總體結構與組件的抽象描述,用於指導大型軟件系統各個方面的設計。架構
軟件框架:根據維基百科定義,框架一般指的是爲了實現某個業界標準或完成特定基本任務的軟件組件規範,也指爲了實現某個軟件組件規範時,提供規範所要求之基礎功能的軟件產品。框架的功能相似於基礎設施,與具體的軟件應用無關,可是提供並實現最爲基礎的軟件架構和體系。軟件開發者一般依據特定的框架實現更爲複雜的商業運用和業務邏輯。這樣的軟件應用能夠在支持同一種框架的軟件系統中運行。簡而言之,框架就是制定一套規範或者規則,你們在該規範或者規則下工做。框架
架構和框架的概念比較類似,且二者一般都有比較強的關聯。框架強調的是規範以及與之相對應實現的基礎軟件產品。架構強調的是總體結構,各組件或者模塊的相互關係,是系統的頂層設計。佈局
好比,咱們常常說咱們採用Spring MVC框架進行開發,是基於MVC架構的。前者指的是具體的軟件產品,後者指的是系統的總體結構。搜索引擎
架構一般又能夠分爲功能架構和技術架構。功能架構是從系統功能的角度來描述系統的總體結構,相似於建築中的建築設計,因此建築圖就是從功能方面來描述一個建築,如一樓商場及其佈局,二樓餐飲及其佈局等。技術架構是從技術的角度來描述系統的總體結構,相似建築中的結構設計,如鋼筋、承重梁及其相互關係。(題外話:軟件工程脫胎於建築工程,因此軟件工程中不少過程都能從建築工程中找到對應的過程)spa
如一個圖書管理系統,功能架構圖示意以下:架構設計
技術架構圖示意以下:
3、模塊和組件
軟件模塊:根據維基百科定義,軟件模塊是一套一致而互相有緊密關連的軟件組織,包含了程序和數據結構兩個部分。是現代軟件開發每每利用模塊做合成的單位。模塊的接口表達了由該模塊提供的功能和調用它時所需的元素。模塊是可能分開地被編寫的單位,能容許普遍人員同時協做、編寫及研究不一樣的模塊。
軟件組件:根據維基百科定義,軟件組件爲定義爲自包含的、可編程的、可重用的、與語言無關的軟件單元。軟件組件能夠很容易被用於組裝應用程序中。
上面的定義比較拗口,其實模塊和組件都是系統的組成部分,只不過它們是從不一樣的角度來拆分系統。模塊是從功能的角度來拆分,組件是從物理或者說實現的技術角度來拆分。劃分模塊的主要目的是職責分離,劃分組件的主要目的是單元複用。
以圖書管理系統來講,讀者信息管理、書籍信息管理這些都是模塊。緩存組件、搜索引擎等就是組件。
另一個容易混淆的概念就是子系統和模塊。子系統是獨立運行的,模塊是子系統的邏輯組成部分。模塊在必定條件下,變成獨立運行,就轉化爲子系統。舉一個不必定很是恰當的例子,好比在某個大型的商業廣場,若是廁所和商場一塊兒,那麼廁所就是商場的一個模塊。若是廁所與商場分離,是獨立的公共廁所,那麼廁所就算是商業廣場的子系統。
4、總結
框架強調的是規範以及與之相對應實現的基礎軟件產品。架構強調的是總體結構,各組件或者模塊的相互關係,是系統的頂層設計。
系統和子系統都是泛指由一羣有關聯的個體組成,根據某種規則運做,能完成個別元件不能單獨完成的工做的羣體。二者差異就是大小的關係。
模塊和組件都是系統的組成部分,模塊是從功能的角度來拆分,組件是從物理或者說實現的技術角度來拆分。劃分模塊的主要目的是職責分離,劃分組件的主要目的是單元複用。
子系統是獨立運行的,模塊是子系統的邏輯組成部分。模塊在必定條件下,變成獨立運行,就轉化爲子系統。