設計(design)、架構(architechure)、框架 (framework)之間是個什麼關係?請描述一下?java
在探討題目問題以前,咱們從設計開始聊聊。程序員
其實咱們每一個人都在作設計,不管咱們是在哪一個行業,哪一個層次,哪一個職位。設計模式
對於軟件系統領域來講:安全
這裏各個層次的設計都有一個樸素的設計理念,那就是 提供抽象接口以此與外圍交互、封裝具體變化以此在內部獨立演進。這個是咱們完成某項複雜任務而組織的大型工程裏的一個基礎理念。架構
剛剛講的是軟件系統領域的設計,但其可擴展到各個領域,如人的系統、建築的系統、小說的系統等等。框架
固然,進行高層設計的人能融匯貫通其相關底層子系統的知識固然最好,可是大多數狀況下,咱們作不到,由於咱們如今組織的系統的層級太多太深了。佈局
舉個例子,咱們設計的業務代碼在編譯後能借助操做系統的能力協調CPU、內存及IO一塊兒完成業務代碼的執行,可是設計業務代碼的人,不必定能知道CPU的流水線是怎麼運做的、內存屏障是如何協調多個核心與內存的、數據具體是怎麼傳輸到其餘機器的。編碼
再舉個例子,某個大型公司CEO可能不懂編碼,但其手下有不一樣類型的大將,包括懂技術的人才,所以CEO只要組織設計一個團體能覆蓋其知識盲點,就能管理好整個公司,包括整個公司的各種軟件系統。操作系統
從上面咱們能夠看到在作高層設計與作底層設計的人的能力是沒法直接比較的,由於他們的能力棧可能徹底不同,沒法簡單地進行比較。架構設計
但一般的套路下,作高層設計的都是從底層設計的人才中轉崗(叫提拔、晉升不必定合適,有時候底層設計的人才更爲稀缺)而來的,由於只有你的設計能力在影響不那麼大的層次通過驗證後,才放心讓你到更高層次進行設計。
實際上架構是一種設計。
架構設計規定了主要組件間一些較大層次的約束與規範,一些較小層次的設計在這些約束與規範下進行的話,能最大限度地知足某些方面的特性,如可閱讀性、可靠性、可擴展性、安全性等等。
舉個例子,咱們在設計一個屋子的時候,房間、廳、廚房等能夠想象爲架構,咱們在進行軟裝的時候,是不能改變原有的設計的,否則隨便敲牆容易形成安全隱患。但咱們能控制軟裝的,造成風格各異的房間。
固然,設計層次的大小是相對的。在剛剛例子裏一個屋子裏的房間佈局是架構。但往上看,在一個街區的架構設計裏,一個屋子的內部房間佈局僅僅只是一個較小層次的設計,其不會影響整個街區的規劃。
所以,架構這一個詞,應該存在於各個層次。就像咱們在寫代碼時,運用各類設計模式,如責任鏈等,規定編寫代碼所使用的方式,以開閉原則保證代碼穩定性及可閱讀性時,咱們就已是這段可擴展的代碼的架構師了。
框架是架構的一種實現。
例如MVC這種架構設計(架構是每一個層次都存在的),分離了不一樣類型代碼的關注點,使得代碼更爲清晰及更易維護。
而各種MVC框架則實現了這種架構,只要咱們基於這個框架擴展實現咱們的代碼,那麼咱們就能寫出符合MVC架構規範的代碼。
同時,在這裏咱們須要額外理清楚的一件事情是框架(framework)與庫(library)的區別。我以爲如下這幅圖很好地說明了這個區別。
本文是基於目前我的理解而成,若文章有謬誤,望不吝 批評斧正 ;若本文對你們有所幫助,望不吝 推薦。
多年金融碼農,現爲某信用卡中心架構師,EasyTransaction做者,歡迎關注
ref: