1. 程式人生 > >我理解的軟體 架構模式,MVC和分層

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

一、緣起

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

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


二、師傅領進門

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



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

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


三、讀萬卷書、行萬里路

架構模式的種類 一文把模式按層次分成三種:架構模式(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以來的主要設計原則:單一職責、迪米特法則又叫最少知道原則、組合模式、介面隔離
為什麼要外掛框架? 每個人都可以把自己的房間打扮成自己想要的模樣, 水和電都是共享的,但是房間確實不一樣的,那就是各式各樣的外掛了
悟的時候,時光要慢了下來,偶爾的靈光一現自己也能感覺到。 別人看我是一個搬磚工,我覺得自己在建一座巨集偉的教堂。