設計,架構,框架之間是什麼關係?

設計(design)、架構(architechure)、框架 (framework)之間是個什麼關係?請描述一下?java

每一個人都在進行設計

在探討題目問題以前,咱們從設計開始聊聊。程序員

其實咱們每一個人都在作設計,不管咱們是在哪一個行業,哪一個層次,哪一個職位。設計模式

  • 畫家做畫時會畫草圖作設計
  • 做家寫做時會列提綱作設計
  • 程序員編碼時會寫僞代碼作設計
  • 清潔工掃地時會在腦海裏設計掃地的執行路徑

設計有大有小

對於軟件系統領域來講:安全

  • 在方法層次,咱們能夠設計方法名、變量名、語句塊使得方法變得易懂、簡潔、高效;
  • 在類的層次,咱們能夠設計其方法、成員變量、靜態變量、繼承關係及可見性級別等,使得一個類能更好地抽象與封裝,方便其餘人使用;
  • 在包的層次咱們能夠設計規劃各個模塊代碼的位置,方便咱們能快速找到對應的代碼;
  • 在服務層次咱們能夠設計服務的粒度,暴露的功能,交流的協議,以方便服務間持續的交互;
  • 在系統層次咱們能夠經過設計系統暴露的功能、協做的形式以完成系統層次的協做;
  • 再往上依然存在須要設計的層級,如多個軟件系統間協做完成的一個大的軟件系統,但每一個公司對此叫法可能不同;
  • 軟件系統再往上也有層級,但其可能就是人類自身的系統了。

這裏各個層次的設計都有一個樸素的設計理念,那就是 提供抽象接口以此與外圍交互、封裝具體變化以此在內部獨立演進。這個是咱們完成某項複雜任務而組織的大型工程裏的一個基礎理念。架構

剛剛講的是軟件系統領域的設計,但其可擴展到各個領域,如人的系統、建築的系統、小說的系統等等。框架

進行高層設計的人不必定精通底層的設計

固然,進行高層設計的人能融匯貫通其相關底層子系統的知識固然最好,可是大多數狀況下,咱們作不到,由於咱們如今組織的系統的層級太多太深了。佈局

舉個例子,咱們設計的業務代碼在編譯後能借助操做系統的能力協調CPU、內存及IO一塊兒完成業務代碼的執行,可是設計業務代碼的人,不必定能知道CPU的流水線是怎麼運做的、內存屏障是如何協調多個核心與內存的、數據具體是怎麼傳輸到其餘機器的。編碼

再舉個例子,某個大型公司CEO可能不懂編碼,但其手下有不一樣類型的大將,包括懂技術的人才,所以CEO只要組織設計一個團體能覆蓋其知識盲點,就能管理好整個公司,包括整個公司的各種軟件系統。操作系統

從上面咱們能夠看到在作高層設計與作底層設計的人的能力是沒法直接比較的,由於他們的能力棧可能徹底不同,沒法簡單地進行比較。架構設計

但一般的套路下,作高層設計的都是從底層設計的人才中轉崗(叫提拔、晉升不必定合適,有時候底層設計的人才更爲稀缺)而來的,由於只有你的設計能力在影響不那麼大的層次通過驗證後,才放心讓你到更高層次進行設計。

架構與設計的關係

實際上架構是一種設計。

架構設計規定了主要組件間一些較大層次的約束與規範,一些較小層次的設計在這些約束與規範下進行的話,能最大限度地知足某些方面的特性,如可閱讀性、可靠性、可擴展性、安全性等等。

舉個例子,咱們在設計一個屋子的時候,房間、廳、廚房等能夠想象爲架構,咱們在進行軟裝的時候,是不能改變原有的設計的,否則隨便敲牆容易形成安全隱患。但咱們能控制軟裝的,造成風格各異的房間。

固然,設計層次的大小是相對的。在剛剛例子裏一個屋子裏的房間佈局是架構。但往上看,在一個街區的架構設計裏,一個屋子的內部房間佈局僅僅只是一個較小層次的設計,其不會影響整個街區的規劃。

所以,架構這一個詞,應該存在於各個層次。就像咱們在寫代碼時,運用各類設計模式,如責任鏈等,規定編寫代碼所使用的方式,以開閉原則保證代碼穩定性及可閱讀性時,咱們就已是這段可擴展的代碼的架構師了。

架構與框架的關係

框架是架構的一種實現。

例如MVC這種架構設計(架構是每一個層次都存在的),分離了不一樣類型代碼的關注點,使得代碼更爲清晰及更易維護。

而各種MVC框架則實現了這種架構,只要咱們基於這個框架擴展實現咱們的代碼,那麼咱們就能寫出符合MVC架構規範的代碼。

同時,在這裏咱們須要額外理清楚的一件事情是框架(framework)與庫(library)的區別。我以爲如下這幅圖很好地說明了這個區別。

總結

  • 爲了完成某件事情,不管咱們身處哪一個職位,都須要進行設計;
  • 一個設計能夠包含多個其餘人負責的子設計,你的設計也多是其餘人設計的一部分;
  • 要完成一個複雜的任務,按層級拆分設計是一個經常使用的方法;
  • 爲了底層設計實現的可控,達到咱們預期的某些效果,咱們要對設計進行規範與限制,這稱爲架構,這也是一種設計;
  • 就像設計有不少層次同樣,架構也有不少的層次;
  • 框架是架構的具體實現,利用框架,並在框架/架構的約束下進行擴展/編碼能加速咱們代碼的實現

最後

本文是基於目前我的理解而成,若文章有謬誤,望不吝 批評斧正 ;若本文對你們有所幫助,望不吝 推薦

相關閱讀

你知道如何畫好一幅架構圖麼?

做者我的公衆號

多年金融碼農,現爲某信用卡中心架構師,EasyTransaction做者,歡迎關注

ref:

相關文章
相關標籤/搜索