談?wù)凪VC模式

轉(zhuǎn)自:http://www.ruanyifeng.com/blog/2007/11/mvc.html

1.

如何設(shè)計(jì)一個(gè)程序的結(jié)構(gòu),這是一門專門的學(xué)問,叫做"架構(gòu)模式"(architectural pattern),屬于編程的方法論。

MVC模式就是架構(gòu)模式的一種,它對(duì)我的啟發(fā)特別大。我覺得它不僅適用于開發(fā)軟件,也適用于其他廣泛的設(shè)計(jì)和組織工作。

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

2.

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

這個(gè)模式認(rèn)為,程序不論簡(jiǎn)單或復(fù)雜,從結(jié)構(gòu)上看,都可以分成三層。

1)最上面的一層,是直接面向最終用戶的"視圖層"(View)。它是提供給用戶的操作界面,是程序的外殼。

2)最底下的一層,是核心的"數(shù)據(jù)層"(Model),也就是程序需要操作的數(shù)據(jù)或信息。

3)中間的一層,就是"控制層"(Controller),它負(fù)責(zé)根據(jù)用戶從"視圖層"輸入的指令,選取"數(shù)據(jù)層"中的數(shù)據(jù),然后對(duì)其進(jìn)行相應(yīng)的操作,產(chǎn)生最終結(jié)果。

這三層是緊密聯(lián)系在一起的,但又是互相獨(dú)立的,每一層內(nèi)部的變化不影響其他層。每一層都對(duì)外提供接口(Interface),供上面一層調(diào)用。這樣一來,軟件就可以實(shí)現(xiàn)模塊化,修改外觀或者變更數(shù)據(jù)都不用修改其他層,大大方便了維護(hù)和升級(jí)。

3.

我用Windows的計(jì)算器小程序?yàn)槔?,解釋一下MVC模式,雖然它不一定使用這個(gè)模式編寫。

在這個(gè)計(jì)算器程序中,外部的那些按鈕和最上面的顯示條,就是"視圖層",那些需要運(yùn)算的數(shù)字就是"數(shù)據(jù)層",執(zhí)行加減乘除的那些內(nèi)部運(yùn)算步驟就是"控制層"。每一層執(zhí)行不同的功能,整個(gè)程序的結(jié)構(gòu)非常清楚。

如果我們擴(kuò)大一點(diǎn)想象,就會(huì)發(fā)現(xiàn),很多程序本質(zhì)上都是這種模式:對(duì)外提供一組觸發(fā)器(本例中是按鈕),然后執(zhí)行一些內(nèi)部操作,最后返回結(jié)果。因此,MVC模式的應(yīng)用是非常廣泛的。

4.

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

以家用微波爐為例,可以將它也理解成三層結(jié)構(gòu)。最簡(jiǎn)單的情況下,微波爐的操作用兩個(gè)轉(zhuǎn)盤實(shí)現(xiàn),一個(gè)控制溫度,另一個(gè)控制時(shí)間。這兩個(gè)轉(zhuǎn)盤就是"視圖層"(view),而其內(nèi)部的微波產(chǎn)生裝置則是"數(shù)據(jù)層"(Model),這里的"數(shù)據(jù)"需要理解成"核心功能"。至于將用戶通過轉(zhuǎn)盤輸入的信息,轉(zhuǎn)換成對(duì)微波產(chǎn)生器的操作,則用"控制層"來實(shí)現(xiàn)。

如果每一層都是獨(dú)立的,那么微波爐外部更換一個(gè)新潮的外殼,或者內(nèi)部更換更大功率的微波產(chǎn)生器,完全可以在不更改其他層的情況下實(shí)現(xiàn)。這就是MVC模式的優(yōu)勢(shì)。

5.

再進(jìn)一步,如果將MVC模式解釋成"外觀"、"機(jī)制"和"功能/數(shù)據(jù)"這三層結(jié)構(gòu),那么很多人類組織也可以通過MVC模式架構(gòu)。

比如一家商場(chǎng),完全可以分成三部分。一部分是倉庫,負(fù)責(zé)提供商品,這是"功能層"(或者"數(shù)據(jù)層");另一部分是零售鋪面,負(fù)責(zé)銷售商品,這是它的"外觀層";兩者之間就是"機(jī)制層",包括柜臺(tái)和倉庫之間一切互動(dòng)的機(jī)制。

這樣區(qū)分以后,這個(gè)商場(chǎng)的結(jié)構(gòu)就變得非常清楚,可以針對(duì)不同的層進(jìn)行優(yōu)化,提高效率。

6.

公司、政黨、政府、醫(yī)院、學(xué)校等等,這些組織不管是盈利性還是非盈利性的,都可以從MVC模式的角度,進(jìn)行架構(gòu),由一個(gè)個(gè)執(zhí)行特定功能、可重復(fù)使用的模塊組成。

我在想,如果人類社會(huì)都是模塊化結(jié)構(gòu),那會(huì)是怎樣的情景?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 如何設(shè)計(jì)一個(gè)程序的結(jié)構(gòu),這是一門專門的學(xué)問,叫做“架構(gòu)模式”(architectural pattern),屬于編...
    流沙麒麟客閱讀 440評(píng)論 0 0
  • 前言 最近在研究Android的MVP設(shè)計(jì)模式,經(jīng)過自己的研究和參考網(wǎng)上的案例,對(duì)MVP設(shè)計(jì)模式也有了一定的了解,...
    ReturnYHH閱讀 1,590評(píng)論 1 2
  • 又看到有人在問三層架構(gòu)和MVC的關(guān)系,感覺這種問題有點(diǎn)教條化了。因?yàn)樗鼈兌荚谶壿嬌蠈?yīng)用程序劃為三塊,湊了一個(gè)數(shù)字...
    Ludiwgbet閱讀 2,043評(píng)論 1 12
  • 一 燕文公二十八年,蒼茫的西北大地上,未過及笄之年的公主披上了繁復(fù)的嫁衣,與父親和弟弟告別后,準(zhǔn)備啟程。她的車馬將...
    匪我思卿閱讀 1,982評(píng)論 5 5
  • 風(fēng)中流淌的水 靜謐 水中搖曳的風(fēng) 清麗 育空河 星光 你 夜里浮起的云 點(diǎn)滴 云里吸收的夜 色系 育空河 星光 你...
    詣然閱讀 200評(píng)論 0 1

友情鏈接更多精彩內(nèi)容