彭詩(shī)媛 闞洪
摘要:MVC是一種源于桌面程序的架構(gòu)模式,它的基本思想是把程序界面和業(yè)務(wù)邏輯分開(kāi),這樣便于軟件的后期維護(hù),同時(shí)也方便開(kāi)發(fā)時(shí)期分工及管理,MVC有很多優(yōu)點(diǎn)所以現(xiàn)在已經(jīng)被廣泛地應(yīng)用于web開(kāi)發(fā)中。本文將介紹MVC模式的概念,并對(duì)各個(gè)層次的功能進(jìn)行詳細(xì)的描述以及闡述MVC模式的處理過(guò)程和總結(jié)MVC模式的優(yōu)缺點(diǎn)。
關(guān)鍵詞:MVC;視圖;模型;控制器
一、 MVC模式概念
MVC的英文全稱是Model-View-Controller。它的核心思想是有效地組合“視圖”,“模型”和“控制器”。
在這種模式中,Servlet用來(lái)處理請(qǐng)求的事務(wù),充當(dāng)了控制器(Controller即“C”)的角色,Servlet負(fù)責(zé)響應(yīng)客戶對(duì)業(yè)務(wù)邏輯的請(qǐng)求并根據(jù)用戶的請(qǐng)求行為,決定將哪個(gè)JSP頁(yè)面發(fā)送給客戶。JSP頁(yè)面處于表現(xiàn)層,也就是視圖(View即“V”)的角色。JavaBean則負(fù)責(zé)數(shù)據(jù)的處理,也就是模型(Model即“M”)的角色。
Servlet+JSP+JavaBean(MVC)模式適合開(kāi)發(fā)復(fù)雜的web應(yīng)用,在這種模式下,Servlet負(fù)責(zé)處理用戶請(qǐng)求,JSP負(fù)責(zé)數(shù)據(jù)顯示,JavaBean負(fù)責(zé)封裝數(shù)據(jù)。Servlet+JSP+JavaBean模式程序各個(gè)模塊之間層次清晰,web開(kāi)發(fā)推薦采用此種模式。
二、 視圖(View)
視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并能接受用戶的輸入數(shù)據(jù),但是它并不進(jìn)行任何實(shí)際的業(yè)務(wù)處理。視圖可以向模型查詢業(yè)務(wù)狀態(tài),但不能改變模型。視圖還能接受模型發(fā)出的數(shù)據(jù)更新事件,從而對(duì)用戶界面進(jìn)行同步更新。
對(duì)于Web應(yīng)用來(lái)說(shuō),可以概括為HTML界面,隨著應(yīng)用的復(fù)雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性。一個(gè)應(yīng)用可能有很多不同的視圖,MVC設(shè)計(jì)模式對(duì)于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理,以及用戶的請(qǐng)求,而不包括在視圖上的業(yè)務(wù)流程的處理。業(yè)務(wù)流程的處理交予模型(Model)處理。比如一個(gè)訂單的視圖只接受來(lái)自模型的數(shù)據(jù)并顯示給用戶,以及將用戶界面的輸入數(shù)據(jù)和請(qǐng)求傳遞給控制和模型。
對(duì)于基于請(qǐng)求/響應(yīng)方式的主體。模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于同一個(gè)模型可以被多個(gè)視圖重用,所以提高了應(yīng)用的可重用性。
三、 模型(Model)
模型是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于同一個(gè)模型可以被多個(gè)視圖重用,所以提高了應(yīng)用的可重用性。
業(yè)務(wù)流程的處理過(guò)程對(duì)其他層來(lái)說(shuō)是黑箱操作,模型接受視圖請(qǐng)求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計(jì)可以說(shuō)是MVC最主要的核心。MVC設(shè)計(jì)模式告訴我們,把應(yīng)用的模型按一定的規(guī)則抽取出來(lái),抽取的層次很重要,這也是判斷開(kāi)發(fā)人員是否優(yōu)秀的設(shè)計(jì)依據(jù)。抽象與具體不能隔得太遠(yuǎn),也不能太近。MVC并沒(méi)有提供模型的設(shè)計(jì)方法,而只告訴你應(yīng)該組織管理這些模型,以便于模型的重構(gòu)和提高重用性。我們可以用對(duì)象編程來(lái)做比喻,MVC定義了一個(gè)頂級(jí)類,告訴它的子類你只能做這些,但沒(méi)法限制你能做這些。這點(diǎn)對(duì)編程的開(kāi)發(fā)人員來(lái)說(shuō)非常重要。
業(yè)務(wù)模型還有一個(gè)很重要的模型那就是數(shù)據(jù)模型。數(shù)據(jù)模型主要是指實(shí)體對(duì)象的數(shù)據(jù)保存。比如將一張訂單保存到數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)獲取訂單。我們可以將這個(gè)模型單獨(dú)列出,所有有關(guān)數(shù)據(jù)庫(kù)的操作只限制在該模型中。
四、 控制器(Controller)
控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。當(dāng)Web用戶單擊Web頁(yè)面中的提交按鈕來(lái)發(fā)送HTML表單時(shí),控制器接受請(qǐng)求并調(diào)用相應(yīng)的模型組件去處理請(qǐng)求,然后調(diào)用相應(yīng)的視圖來(lái)顯示模型返回的數(shù)據(jù)。
劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個(gè)分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請(qǐng)求??刂茖硬⒉蛔鋈魏蔚臄?shù)據(jù)處理。例如,用戶點(diǎn)擊一個(gè)鏈接,控制層接受請(qǐng)求后,并不處理業(yè)務(wù)信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個(gè)模型可能對(duì)應(yīng)多個(gè)視圖,一個(gè)視圖可能對(duì)應(yīng)多個(gè)模型。
五、 MVC的處理過(guò)程
首先用戶通過(guò)視圖層發(fā)出請(qǐng)求,接著控制器接收用戶的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來(lái)進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來(lái)處理用戶的請(qǐng)求并返回?cái)?shù)據(jù),最后控制器將處理后的數(shù)據(jù)傳遞給視圖層,并通過(guò)視圖層更新顯示。
六、 MVC的優(yōu)點(diǎn)
(一) 耦合性低
所謂耦合性就是模塊代碼之間的關(guān)聯(lián)程度。利用MVC框架使得View(視圖)層和Model(模型)層可以很好地分離,這樣就達(dá)到了解耦的目的,所以耦合性低,減少模塊代碼之間的相互影響。
(二) 可擴(kuò)展性好
由于耦合性低,添加需求,擴(kuò)展代碼就可以減少修改之前的代碼,降低bug的出現(xiàn)率。
(三) 模塊職責(zé)劃分明確
主要?jiǎng)澐謱覯,V,C三個(gè)模塊,利于代碼的維護(hù)。
七、 MVC的缺點(diǎn)
1. 由于實(shí)施MVC模式過(guò)程而產(chǎn)生的開(kāi)銷。設(shè)計(jì)MVC模式需要有經(jīng)驗(yàn)的分析人員對(duì)系統(tǒng)進(jìn)行分析;類的數(shù)量及文件數(shù)量的增加。采用MVC模式設(shè)計(jì)會(huì)增大應(yīng)用程序的代碼量。
2. 由于設(shè)計(jì)MVC模式時(shí)分析不夠,設(shè)計(jì)不當(dāng)而引起相反的效果,把屬于一個(gè)模塊的分開(kāi),把不相干的模塊聚在一起。對(duì)屬于一個(gè)實(shí)體不同方面的嚴(yán)格區(qū)分導(dǎo)致了一個(gè)緊湊結(jié)構(gòu),使得測(cè)試和維護(hù)的工作量大幅度增加,每一次變動(dòng)牽涉到許多本不相干的模塊的變動(dòng)。
八、 總結(jié)
通過(guò)對(duì)MVC的探討,我們知道它是用來(lái)分割頁(yè)面和數(shù)據(jù)庫(kù)訪問(wèn)的框架,降低了兩者的耦合度,同時(shí)通過(guò)Controller的控制,也使系統(tǒng)更加的靈活,使我們的代碼更健壯,復(fù)用性更強(qiáng),但是凡事都有他適用的范圍,我們不能覺(jué)得它好,就瞎用,有時(shí)可能會(huì)適得其反,因此MVC的學(xué)習(xí)還需要我們以后慢慢探討。
參考文獻(xiàn):
[1]孫琦.淺議MVC設(shè)計(jì)模式[J].科技信息:科學(xué)·教研,2007(16):74.
[2]李譜華.淺析MVC設(shè)計(jì)模式及其應(yīng)用[J].科技信息,2010(16):662-663.
[3]劉方軍.基于MVC三層架構(gòu)模式的研究與應(yīng)用[D].廣東工業(yè)大學(xué),2011.
作者簡(jiǎn)介:
彭詩(shī)媛,闞洪,重慶市,重慶工程學(xué)院。