最近在學習極客時間《從0到1學架構》,記一些筆記。編程
每個從事技術工做的同窗,都有一個成爲架構師的夢想,去從事設計架構方面的工做。那麼架構這個詞具體是什麼?數據結構
在我平時的工做中,會進行團隊內部分大功能的架構設計,平時也會經過各類渠道瞭解其餘公司的架構設計。架構
但當咱們聊架構的時候,咱們具體是在聊什麼?框架
在具體定義什麼是架構前,先將架構設計中常常提到的一些名詞,先進行梳理。工具
系統泛指由一羣有關聯的個體組成,根據某種規則運做,能完成個別元件不能單獨完成的工做的羣體。它的意思是「整體」「總體」或「聯盟」。
引用的是來自維基百科的定義,有一些特色,以下所示:佈局
關聯: 系統是有一羣有關聯的個體所組成的,沒有關聯的個體不可以成爲一個系統,也就是說在一個系統內部的東西,確定是互相有所關聯的。好比說咱們在打造一間臥室,不可能把廁所放進臥室,只有當牀,書桌,燈這些東西都在一個房間內時,才組成了臥室。若是從技術系統的角度上來講,我理解就是,一個系統內的功能或者模塊的存在都是爲了這個這個系統的定位服務的,好比說一個負責商戶管理的系統,每每不會把用戶相關的管理放進來。學習
規則: 一個系統內的個體確定是按系通通一的規則運做,規定了系統內個體之間分工和協做的方式。好比一個交易系統,會定義校驗模塊,風控模塊,限流模塊,算價模塊,落單模塊,發券模塊等,會定義好每一個模塊的職能以及協做的方式,完成整個交易流程。spa
能力: 個體組合在一塊兒產生了新的系統能力,是單個個體所不具有的,好比汽車可以載重前進,但汽車中的單個個體抽出來都不具有這樣的能力,好比發動機、變速器、傳動軸、車輪。架構設計
我理解子系統的定義其實和系統是同樣的,一個系統可能就是另外一個系統的子系統。拿交易系統舉個例子。翻譯
維基百科定義以下
軟件模塊(Module)是一套一致而互相有緊密關連的軟件組織。它分別包含了程序和數據結構兩部分。現代軟件開發每每利用模塊做爲合成的單位。模塊的接口表達了由該模塊提供的功能和調用它時所需的元素。模塊是可能分開被編寫的單位。這使它們可再用和容許人員同時協做、編寫及研究不一樣的模塊。軟件組件定義爲自包含的、可編程的、可重用的、與語言無關的軟件單元,軟件組件能夠很容易被用於組裝應用程序中。
我以爲模塊,從我的感覺上來講,模塊主要定義的是功能的集合,是爲了職責上進行分離,好比交易系統的下單流程 可能會分爲 校驗模塊,優惠計算模塊,風控模塊,下單模塊等,每一個模塊各司其職,只關注在本身的事情,當有一些業務需求變動時,只須要改動相應的模塊,不會影響其餘模塊。
我以爲組件的話,從其英文單詞component上,也能夠翻譯成零件一次,感受像是獨立可替換的東西,我我的對組件的理解是一個可複用的東西,能夠根據需求放在不一樣模塊裏去使用,好比定義一個數據轉換組件,統一的校驗組件,統一的異常處理器,均可以理解是組件。
學習時,做者提到,不少人每每分不清楚框架和架構。但我我的理解框架和架構仍是很好區分的。
框架,從維基百科的釋義上是:
軟件框架(Software framework)一般指的是爲了實現某個業界標準或完成特定基本任務的軟件組件規範,也指爲了實現某個軟件組件規範時,提供規範所要求之基礎功能的軟件產品。
也就是說框架關注的是規範,按照某一個規範去用這個框架,去實現咱們要求的功能,而且額外提供一些基礎功能,好比Srping MVC 是MVC的開發框架,除了知足MVC的規範,還提供了不少基礎功能幫助開發者實現功能,好比註解,Security,JPA等。
框架,個人我的層面理解就是一種幫助開發者實現軟件功能的工具,而架構是開發者決定如何去設計軟件。
架構,從維基百科上的釋義是:
軟件架構指軟件系統的「基礎結構」,創造這些基礎結構的準則,以及對這些結構的描述。
架構更關注的是結構,如何組成你的整個軟件系統這件事。但因爲在軟件架構的定義中,並未將什麼是基礎結構明確說明,因此從不一樣的角度解讀架構,其實均可以。
好比從業務邏輯角度來講,學生管理系統的架構能夠是:
從物理部署的角度,學生管理系統的架構能夠是:
從開發規範的角度,由於採用標準的MVC框架開發,學生管理系統的架構又能夠是:
這些「架構」,都是「學生管理系統」正確的架構,只是從不一樣的角度來分解而已,這也是 IBM 的 RUP 將軟件架構視圖分爲著名的「4+1 視圖」的緣由。
架構是一個軟件系統的頂層結構,就像建築設計師的草圖,定義了總體的骨架,每一塊佈局之間如何串聯,造成協同效應。
架構定義了軟件中的各個系統,子系統,模塊和組件,如何組成,而且如何運做和協做。
好比一樣的一個交易系統,由於選擇的架構不一樣,各個系統之間的交互方式,組成方式也會不一樣。
因此個人理解是架構決定的是軟件系統的頂層設計,並且細化到每一個單獨的系統,也有其本身的架構設計。
站的視角越高,看到的架構越寬泛一些。
架構是頂層設計;框架是面向編程或配置的半成品;組件是從技術維度上的複用;模塊是從業務維度上職責的劃分;系統是相互協同可運行的實體。