看到峰哥寫的MVC,十分生動。
作者: 阮一峰
日期: 2007年11月 8日
1.
如何設計一個程式的結構,這是一門專門的學問,叫做"架構模式"(architectural pattern),屬于程式設計的方法論。
MVC模式就是架構模式的一種,它對我的啟發特别大。我覺得它不僅适用于開發軟體,也适用于其他廣泛的設計群組織工作。
下面是我對MVC模式的一些個人了解,不一定正确,主要用來整理思路。
2.
MVC是三個單詞的首字母縮寫,它們是Model(模型)、View(視圖)和Controller(控制)。
這個模式認為,程式不論簡單或複雜,從結構上看,都可以分成三層。
1)最上面的一層,是直接面向最終使用者的"視圖層"(View)。它是提供給使用者的操作界面,是程式的外殼。
2)最底下的一層,是核心的"資料層"(Model),也就是程式需要操作的資料或資訊。
3)中間的一層,就是"控制層"(Controller),它負責根據使用者從"視圖層"輸入的指令,選取"資料層"中的資料,然後對其進行相應的操作,産生最終結果。
這三層是緊密聯系在一起的,但又是互相獨立的,每一層内部的變化不影響其他層。每一層都對外提供接口(Interface),供上面一層調用。這樣一來,軟體就可以實作子產品化,修改外觀或者變更資料都不用修改其他層,大大友善了維護和更新。
3.

我用Windows的電腦小程式為例,解釋一下MVC模式,雖然它不一定使用這個模式編寫。
在這個電腦程式中,外部的那些按鈕和最上面的顯示條,就是"視圖層",那些需要運算的數字就是"資料層",執行加減乘除的那些内部運算步驟就是"控制層"。每一層執行不同的功能,整個程式的結構非常清楚。
如果我們擴大一點想象,就會發現,很多程式本質上都是這種模式:對外提供一組觸發器(本例中是按鈕),然後執行一些内部操作,最後傳回結果。是以,MVC模式的應用是非常廣泛的。
4.
在我看來,不僅編寫程式可以用MVC模式,家用電器也可以用。
以家用微波爐為例,可以将它也了解成三層結構。最簡單的情況下,微波爐的操作用兩個轉盤實作,一個控制溫度,另一個控制時間。這兩個轉盤就是"視圖層"(view),而其内部的微波産生裝置則是"資料層"(Model),這裡的"資料"需要了解成"核心功能"。至于将使用者通過轉盤輸入的資訊,轉換成對微波産生器的操作,則用"控制層"來實作。
如果每一層都是獨立的,那麼微波爐外部更換一個新潮的外殼,或者内部更換更大功率的微波産生器,完全可以在不更改其他層的情況下實作。這就是MVC模式的優勢。
5.
再進一步,如果将MVC模式解釋成"外觀"、"機制"和"功能/資料"這三層結構,那麼很多人類組織也可以通過MVC模式架構。
比如一家商場,完全可以分成三部分。一部分是倉庫,負責提供商品,這是"功能層"(或者"資料層");另一部分是零售鋪面,負責銷售商品,這是它的"外觀層";兩者之間就是"機制層",包括櫃台和倉庫之間一切互動的機制。
這樣區分以後,這個商場的結構就變得非常清楚,可以針對不同的層進行優化,提高效率。
6.