談談MVC模式

阮一峰發表於2007-11-08

1.

如何設計一個程式的結構,這是一門專門的學問,叫做"架構模式"(architectural pattern),屬於程式設計的方法論。

MVC模式就是架構模式的一種,它對我的啟發特別大。我覺得它不僅適用於開發軟體,也適用於其他廣泛的設計和組織工作。

下面是我對MVC模式的一些個人理解,不一定正確,主要用來整理思路。

2.

MVC是三個單詞的首字母縮寫,它們是Model(模型)、View(檢視)和Controller(控制)。

這個模式認為,程式不論簡單或複雜,從結構上看,都可以分成三層。

1)最上面的一層,是直接面向終端使用者的"檢視層"(View)。它是提供給使用者的操作介面,是程式的外殼。

2)最底下的一層,是核心的"資料層"(Model),也就是程式需要操作的資料或資訊。

3)中間的一層,就是"控制層"(Controller),它負責根據使用者從"檢視層"輸入的指令,選取"資料層"中的資料,然後對其進行相應的操作,產生最終結果。

這三層是緊密聯絡在一起的,但又是互相獨立的,每一層內部的變化不影響其他層。每一層都對外提供介面(Interface),供上面一層呼叫。這樣一來,軟體就可以實現模組化,修改外觀或者變更資料都不用修改其他層,大大方便了維護和升級。

3.

bg2007110801.jpg

我用Windows的計算器小程式為例,解釋一下MVC模式,雖然它不一定使用這個模式編寫。

在這個計算器程式中,外部的那些按鈕和最上面的顯示條,就是"檢視層",那些需要運算的數字就是"資料層",執行加減乘除的那些內部運算步驟就是"控制層"。每一層執行不同的功能,整個程式的結構非常清楚。

如果我們擴大一點想象,就會發現,很多程式本質上都是這種模式:對外提供一組觸發器(本例中是按鈕),然後執行一些內部操作,最後返回結果。因此,MVC模式的應用是非常廣泛的。

4.

bg2007110802.jpg

在我看來,不僅編寫程式可以用MVC模式,家用電器也可以用。

以家用微波爐為例,可以將它也理解成三層結構。最簡單的情況下,微波爐的操作用兩個轉盤實現,一個控制溫度,另一個控制時間。這兩個轉盤就是"檢視層"(view),而其內部的微波產生裝置則是"資料層"(Model),這裡的"資料"需要理解成"核心功能"。至於將使用者透過轉盤輸入的資訊,轉換成對微波產生器的操作,則用"控制層"來實現。

如果每一層都是獨立的,那麼微波爐外部更換一個新潮的外殼,或者內部更換更大功率的微波產生器,完全可以在不更改其他層的情況下實現。這就是MVC模式的優勢。

5.

再進一步,如果將MVC模式解釋成"外觀"、"機制"和"功能/資料"這三層結構,那麼很多人類組織也可以透過MVC模式架構。

比如一家商場,完全可以分成三部分。一部分是倉庫,負責提供商品,這是"功能層"(或者"資料層");另一部分是零售鋪面,負責銷售商品,這是它的"外觀層";兩者之間就是"機制層",包括櫃檯和倉庫之間一切互動的機制。

這樣區分以後,這個商場的結構就變得非常清楚,可以針對不同的層進行最佳化,提高效率。

6.

公司、政黨、政府、醫院、學校等等,這些組織不管是盈利性還是非盈利性的,都可以從MVC模式的角度,進行架構,由一個個執行特定功能、可重複使用的模組組成。

我在想,如果人類社會都是模組化結構,那會是怎樣的情景?

(完)

相關文章