前言
本篇文章將整理一下關(guān)于MVC的相關(guān)內(nèi)容.
- MVC模式與三層結(jié)構(gòu)
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫(xiě),一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫(xiě)業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來(lái)用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中。

MVC是一種模式,但卻在GoF總結(jié)出來(lái)的這個(gè)23個(gè)設(shè)計(jì)模式之外,確切的說(shuō)它不是一種設(shè)計(jì)模式,因?yàn)樗嵌喾N設(shè)計(jì)模式的組合,并不僅僅只是一個(gè)單獨(dú)的一個(gè)模式。
而MVC與三層結(jié)構(gòu),也有著根本的區(qū)別,他們?cè)谠O(shè)計(jì)的思想上都不相同,三層結(jié)構(gòu),將軟件體系分為ui表現(xiàn)層,業(yè)務(wù)邏輯層,與數(shù)據(jù)訪問(wèn)層.三層結(jié)構(gòu)是一種軟件體系的結(jié)構(gòu)方式,將軟件的結(jié)構(gòu)體系分為了這么三塊,而現(xiàn)在大多的程序員在使用MVC模式(如今MVC模式大行其道)的時(shí)候,更容易將業(yè)務(wù)邏輯層寫(xiě)入Controller層,將數(shù)據(jù)訪問(wèn)寫(xiě)到model層.這其實(shí)是不對(duì)的,這樣的軟件(網(wǎng)站),不過(guò)是拋頭換面的三層結(jié)構(gòu)設(shè)計(jì),而算不上MVC模式.

為什么MVC模式是由view,controller,model三個(gè)核心部分組成,controller為什么叫控制器,而不是叫什么業(yè)務(wù)器呢.那時(shí)因?yàn)镸VC的基本設(shè)計(jì)理念就與三層結(jié)構(gòu)是不同的,并且詳細(xì)來(lái)判斷的話,他們都不是一個(gè)層次的技術(shù),三層結(jié)構(gòu)適用于整體軟件體系結(jié)構(gòu)的設(shè)計(jì).而MVC模式也可以說(shuō)是一種設(shè)計(jì)模式(多種設(shè)計(jì)模式結(jié)合),設(shè)計(jì)模式提供的不是一個(gè)軟件系統(tǒng)的結(jié)構(gòu)解決方案,設(shè)計(jì)模式 指的是可復(fù)用的面向?qū)ο筌浖?它面對(duì)的是軟件系統(tǒng)中更小,更實(shí)際的開(kāi)發(fā)問(wèn)題.
MVC要實(shí)現(xiàn)的目標(biāo)是將軟件用戶界面和業(yè)務(wù)邏輯分離以使代碼可擴(kuò)展性、可復(fù)用性、可維護(hù)性、靈活性加強(qiáng)。
比方說(shuō),有一個(gè)View會(huì)提交數(shù)據(jù)給Model進(jìn)行處理以實(shí)現(xiàn)具體的行為,View通常不會(huì)直接提交數(shù)據(jù)給Model,它會(huì)先把數(shù)據(jù)提交給Controller,然后Controller再將數(shù)據(jù)轉(zhuǎn)發(fā)給Model。假如此時(shí)程序業(yè)務(wù)邏輯的處理方式有變化,那么只需要在Controller中將原來(lái)的Model換成新實(shí)現(xiàn)的Model就可以了,控制器的作用就是這么簡(jiǎn)單, 用來(lái)將不同的View和不同的Model組織在一起,順便替雙方傳遞消息,僅此而已。
我們通過(guò)controller來(lái)控制vlew與model之間的聯(lián)系,與數(shù)據(jù)傳輸.而不是通過(guò)controller來(lái)處理業(yè)務(wù).
我們通過(guò)一個(gè)例子來(lái)看看:

- 首先我們?cè)趍odel層里定義一個(gè)model類(相當(dāng)于一個(gè)javabean)model用來(lái)儲(chǔ)存數(shù)據(jù)對(duì)象,也可以帶有一些邏輯,用來(lái)在數(shù)據(jù)變化是更新控制器:

聲明屬性,并聲明成員方法,與構(gòu)造方法等主要方法:

-
然后我們?cè)趘iew層里定義兩個(gè)view視圖用來(lái)做不同的輸出:
圖片.png

- 在controller層中定義一個(gè)controller控制器,來(lái)控制view與model之間的互聯(lián)與數(shù)據(jù)的交互:

我們可以看到,controller控制器,是基于view,model對(duì)象來(lái)進(jìn)行操作的,它主要需要起到的作用就是控制view與model之間的聯(lián)系.如此,簡(jiǎn)單化controller中的代碼,便于在后期業(yè)務(wù)變動(dòng)修改和維護(hù)系統(tǒng).
- 最后我們通過(guò)一個(gè)demo類(定義主方法)來(lái)看看MVC模式的具體機(jī)制:

我們可以看到,我們只要聲明并運(yùn)行對(duì)應(yīng)的controller,就可以實(shí)現(xiàn)不同的model與view之間的聯(lián)系.
MVC 分層有助于管理復(fù)雜的應(yīng)用程序,因?yàn)槟梢栽谝粋€(gè)時(shí)間內(nèi)專門(mén)關(guān)注一個(gè)方面。例如,您可以在不依賴業(yè)務(wù)邏輯的情況下專注于視圖設(shè)計(jì)。同時(shí)也讓?xiě)?yīng)用程序的測(cè)試更加容易,MVC 分層同時(shí)也簡(jiǎn)化了分組開(kāi)發(fā)。不同的開(kāi)發(fā)人員可同時(shí)開(kāi)發(fā)視圖、控制器邏輯和業(yè)務(wù)邏輯。
MVC指MVC設(shè)計(jì)模式的某種框架,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。最典型的MVC就是JSP + servlet+ javabean的模式。
- 設(shè)計(jì)模式與框架
設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_(kāi)發(fā)人員所采用。設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。這些解決方案是眾多軟件開(kāi)發(fā)人員經(jīng)過(guò)相當(dāng)長(zhǎng)的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來(lái)的。
設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
框架通常是代碼重用,而設(shè)計(jì)模式是設(shè)計(jì)重用,框架與設(shè)計(jì)模式雖然相似,但卻有著根本的不同。設(shè)計(jì)模式是對(duì)在某種環(huán)境中反復(fù)出現(xiàn)的問(wèn)題以及解決該問(wèn)題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執(zhí)行或復(fù)用,而對(duì)模式而言只有實(shí)例才能用代碼表示;設(shè)計(jì)模式是比框架更小的元素,一個(gè)框架中往往含有一個(gè)或多個(gè)設(shè)計(jì)模式,框架總是針對(duì)某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用??梢哉f(shuō),框架是軟件,而設(shè)計(jì)模式是軟件的知識(shí)。
參考:
深入理解MVC
設(shè)計(jì)模式
MVC
更新時(shí)間:
2019-7-15
15:11
