天天看點

我了解的軟體 架構模式,MVC和分層

一、緣起

    作為程式員,很容易天天被業務追逐着,抽不開時間修煉。有一天突然停了一下,忽地就會有一種怅然的感覺,過去的那些日子我學到了什麼?

有人很認真地說自己有10年經驗,有人笑說你不過是一年經驗用了10年而已。

二、師傅領進門

做人,做事,做架構師--架構師能力模型解析這篇文章,已經把架構師的能力總結好了,簡單就是兩個詞,做人、做事。在上文中,作者提出了作為架構師做事需要做好的事情如下圖,特别有道理,特别值得再細細品味一下

我了解的軟體 架構模式,MVC和分層

什麼樣的架構師是一個會做事的架構師?既能做設計、做決策、關鍵時刻還要自己能光着膀子上。也就是下得了廚房,上得了廳堂。

架構師是一個有全局觀的設計師,有全局觀的程式員。大家都在低着頭走路的時候,他偶爾看了看天上的天象。

三、讀萬卷書、行萬裡路

架構模式的種類 一文把模式按層次分成三種:架構模式(Architectural Pattern)、設計模式(Design Pattern)、成例(Idiom)。成例有時稱為代碼模式(Coding Pattern)。這三者之間的差別在于三種不同的模式存在于它們各自的抽象層次和具體層次上。架構模式是一個系統的高層次政策,涉及到大尺度的元件以及整體性質和力學。架構模式的好壞可以影響到總體布局和架構性結構。設計模式是中等尺度的結構政策。這些中等尺度的結構實作了一些大尺度元件的行為和它們之間的關系。模式的好壞不會影響到系統的總體布局和總體架構。設計模式定義出子系統或元件的微觀結構。代碼模式(或成例)是特定的範例和與特定語言有關的程式設計技巧。代碼模式的好壞會影響到一個中等尺度元件的内部、外部的結構或行為的底層細節,但不會影響到一個部件或子系統的中等尺度的結構,更不會影響到系統的總體布局和大尺度架構。 

今天隻想探索最酷炫的架構模式。 架構的美隻有架構師的眼中才能看得到。大家都看着的隻是一堆磚泥瓦的時候,隻有架構師最清楚這個地方以後會長出來一個多麼漂亮的高樓。

main函數入口: 所有的系統,都有一個入口。大家都是從最簡單的main函數開始,隻是為何有的就隻是print一個helloword,有的在做高密度的計算把CPU耗成100%,有的起了一個健壯的服務,有的建起了一個漂亮的花花世界。 就像還是種子的時候看起來,種子樣子都是差不多的,最後長成的樣子會是千差萬别。 一定要看好main的入口,一個看不起眼的地方,也是萬物萌芽的地方。

ApplicationContext: 好多系統都有一個ApplicationContext,小白的話可能沒有注意到它。更多的人是瞥了一眼ApplicationContext,當作沒存在直接上去就搞業務。這樣的問題就是導緻建的房子就像是一棟沒有地基的房子,錯亂搭建起來,雜亂無章。 很多系統ApplicationContext做了很多奇奇怪怪的初始化,然後這個系統的地基打好了。 然後很多人可以在上面工作了,很多很多人。 系統的地基就是系統的核心架構,就是在ApplicationContext裡面加載完畢的。

基礎服務和common元件: 系統的架構已經在ApplicationContext中搭好了。 架構上首先運作着系統的心髒, 也就是系統的基礎服務和common元件,是工業時代的水和電。 很多系統都有一個ServiceManager.getService(xxx),或者是xxxFactory.createXXX()

業務單元: 系統架構已經搭好,基礎服務和公共元件庫也建好了以後,業務單元就可以百花齊放了。 很多人 可以同時用系統共享的水和電一起開工建房子了,然後直接一拼,聯排别墅已經建好,這也太神速了吧。 是以很多人以為自己建房子挺快的,以為建一個房子很容易,其實他更像是在裝修一個毛坯房。

一個架構模式描述軟體系統裡的基本的結構組織或綱要。 架構模式提供一些事先定義好的子系統,指定它們的責任,并給出把它們組織在一起的法則和指南。

  • MVC 模式 一個架構模式常常可以分解成很多個設計模式的聯合使用。 MVC 模式常常包括調停者(Mediator)模式、政策(Strategy)模式、合成(Composite) 模式、觀察者(Observer)模式等。
  • Layers(分層)模式 有時也稱 Tiers 模式
  • Blackboard(黑闆)模式
  • Broker(中介)模式
  • Distributed Process(分散過程)模式
  • Microkernel(微核)模式

架構模式常常劃分成如下的幾種:

子產品結構(From Mud to Structure)型。幫助架構師将系統合理劃分,避免形成一個對象的海洋。 包括 Layers (分層)模式、 Blackboard (黑闆)模式、 Pipes/Filters (管道/過濾器)模式等。

分散系統(Distributed Systems)型。為分散式系統提供完整的架構設計,包 括像 Broker(中介)模式等。

人機互動(Interactive Systems)型,支援包含有人機互動介面的系統的架構設計,例子包括 MVC(Model-View-Controller)模式、PAC (Presentation-Abstraction-Control)模式等。

Adaptable Systems 型, 支援應用系統适應技術的變化、 軟體功能需求的變化。 如 Reflection(反射)模式、Microkernel(微核)模式等。

四、悟 最了解的軟體架構模式就是分層和MVC和插件

為什麼要分層? 分層就是為了分類,每一個層都有自己的職責。

東西多了就自然而然分層,物以類聚。 建個小屋是不需要分層的,房子高了才需要分層。每一層都有自己服務的層。B2就是停車場、B1是食堂、1層是大堂…… 分層依據的主要設計原則就是:單一職責、依賴倒置

網絡方面有熟知的 OSI 七層模型 應用程式架構方面有:持久層--〉服務層--〉應用層 

為什麼要有MVC? 類與類之間的關系越密切,耦合度越大,當一個類發生改變時,對另一個類的影響也越大 房子各式各樣的設計都有,但是裡面的元件是可以共享的 外面對接的是Controller,從資料服務取出資料拼成Model,畫到View上去 應用層邏輯比較複雜,互動較多。 MVC以來的主要設計原則:單一職責、迪米特法則又叫最少知道原則、組合模式、接口隔離

為什麼要插件架構? 每個人都可以把自己的房間打扮成自己想要的模樣, 水和電都是共享的,但是房間确實不一樣的,那就是各式各樣的插件了

悟的時候,時光要慢了下來,偶爾的靈光一現自己也能感覺到。 别人看我是一個搬磚工,我覺得自己在建一座宏偉的教堂。

繼續閱讀