摘要:隨著互聯(lián)網(wǎng)的發(fā)展,基于B/S結(jié)構(gòu)的Web開(kāi)發(fā)技術(shù)的不斷推廣和應(yīng)用,MVC設(shè)計(jì)模式在JavaWeb開(kāi)發(fā)中的應(yīng)用越來(lái)越廣泛和成熟,本文從宏觀的角度討論了MVC設(shè)計(jì)模式在JavaWeb開(kāi)發(fā)三層架構(gòu)和開(kāi)發(fā)框架中的影響,強(qiáng)調(diào)了MVC通過(guò)分層設(shè)計(jì)的理念,實(shí)現(xiàn)了分層解耦、代碼復(fù)用,更方便維護(hù)和測(cè)試軟件系統(tǒng)的目的。
關(guān)鍵詞:MVC設(shè)計(jì)模式;javaWEB三層架構(gòu);javaWEB框架
隨著Web頁(yè)面在Internet上的普及,基于B/S架構(gòu)的Web開(kāi)發(fā)技術(shù)也越來(lái)越成熟,其中基于MVC設(shè)計(jì)模式的JavaWeb的開(kāi)發(fā)技術(shù)發(fā)展迅速,應(yīng)用也最為廣泛。下面對(duì)MVC設(shè)計(jì)模式在JavaWeb開(kāi)發(fā)中的影響和作用進(jìn)行淺顯的探討。
1 設(shè)計(jì)模式的概念
設(shè)計(jì)模式:對(duì)于一類重復(fù)出現(xiàn)的問(wèn)題的一種可以重用的解決方案;[1]在軟件開(kāi)發(fā)中應(yīng)用設(shè)計(jì)模式的思想可以提供解決重復(fù)出現(xiàn)的相同或相似問(wèn)題的思路和方案,從而減少重復(fù)的工作和加快開(kāi)發(fā)的速度。
2 MVC設(shè)計(jì)模式
MVC設(shè)計(jì)模式簡(jiǎn)介:MVC設(shè)計(jì)模式是軟件工程中的一種軟件架構(gòu)模式,把軟件系統(tǒng)從邏輯上抽象成三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller),簡(jiǎn)稱MVC。它是一種軟件設(shè)計(jì)的典范,最早為T(mén)rygve Reenskaug提出,為施樂(lè)帕羅奧多研究中心(Xerox PARC)的Smalltalk語(yǔ)言發(fā)明的一種軟件設(shè)計(jì)模式。[2]
2.1 MVC的功能作用
MVC通過(guò)分層設(shè)計(jì)的理念,將業(yè)務(wù)流程進(jìn)行邏輯上的歸類和分工,從而使處理流程清晰,達(dá)到了分層解耦、代碼復(fù)用,更方便維護(hù)和測(cè)試軟件系統(tǒng)的目的。[3]
2.2 MVC具體執(zhí)行過(guò)程
(1)用戶發(fā)送請(qǐng)求控制器;
(2)控制處理用戶請(qǐng)求,調(diào)用業(yè)務(wù)相關(guān)模型處理數(shù)據(jù);
(3)業(yè)務(wù)調(diào)用數(shù)據(jù)訪問(wèn)模型,驗(yàn)證請(qǐng)求的內(nèi)容是否成功,如果成功則封裝到數(shù)據(jù)模型中;
(4)數(shù)據(jù)訪問(wèn)模型到數(shù)據(jù)庫(kù)中檢索并操作數(shù)據(jù)。
3 MVC與JavaWeb的三層架構(gòu)
3.1 JavaWeb開(kāi)發(fā)中的三層架構(gòu)思想
JAVA三層架構(gòu)主要是指邏輯上劃分的三層:表示層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問(wèn)層(DAL)。如圖2所示,其中實(shí)體層獨(dú)立于其他層,僅供其他層次進(jìn)行引用。
下面簡(jiǎn)要說(shuō)明一下JavaWeb三層架構(gòu)中每一層的功能:
(1)表示層或用戶界面層(User interface):展現(xiàn)給用戶的最終界面;
(2)業(yè)務(wù)邏輯層(Business Logic Layer):對(duì)具體事務(wù)的業(yè)務(wù)邏輯操作,主要是對(duì)數(shù)據(jù)業(yè)務(wù)的邏輯處理;
(3)數(shù)據(jù)訪問(wèn)層(Data Access Layer):封裝了對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)細(xì)節(jié),為表示層或業(yè)務(wù)邏輯層提供數(shù)據(jù)服務(wù)。
3.2 MVC和JavaWeb三層架構(gòu)的關(guān)系
三層架構(gòu)是軟件工程中的宏觀設(shè)計(jì),MVC是三層架構(gòu)上具體實(shí)現(xiàn)的一種設(shè)計(jì)思想,再根據(jù)MVC的設(shè)計(jì)思想將不同作用的代碼進(jìn)行分類歸納,從而來(lái)具體實(shí)現(xiàn)軟件項(xiàng)目工程。[4]
通過(guò)圖3、圖4的展現(xiàn),可以清晰的理解MVC和JavaWeb三層架構(gòu)之間的關(guān)系。
4 MVC在JavaWeb框架中的應(yīng)用
MVC模式被廣泛用于Java的各種框架中,如Struts、Spring、Hibernate、Spring MVC、Mybatis等等,都用到了這種思想。JavaWeb開(kāi)發(fā)框架是MVC設(shè)計(jì)模式思想從抽象到具體功能代碼實(shí)現(xiàn)的高效集成化組件集。[5]
4.1 常用JavaWeb框架簡(jiǎn)介
JavaWeb框架種類較多,下面列舉常用的框架來(lái)簡(jiǎn)要說(shuō)明:
4.1.1 Strust1
Struts1框架是一個(gè)實(shí)現(xiàn)了MVC模式的應(yīng)用程序框架,它定義了通用的控制器(Controller),通過(guò)配置文件strutsconfig.xml隔離模型Model和視圖View,以Action的概念對(duì)用戶請(qǐng)求做了封裝,同時(shí)還提供了自動(dòng)將請(qǐng)求的數(shù)據(jù)填充到對(duì)象中以及頁(yè)面標(biāo)簽等簡(jiǎn)化編碼的工具。
4.1.2 Strust2
Struts2是基于MVC的輕量級(jí)的web應(yīng)用框架。基于MVC,說(shuō)明基于Struts2開(kāi)發(fā)的Web應(yīng)用自然就能實(shí)現(xiàn)MVC,也說(shuō)明Struts2著力于在MVC的各個(gè)部分為我們的開(kāi)發(fā)提供相應(yīng)幫助。
Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。[6]Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大。Struts 2以WebWork為核心,采用攔截器的機(jī)制來(lái)處理用戶的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開(kāi),所以Struts 2可以理解為WebWork的更新產(chǎn)品。雖然從Struts 1到Struts 2有著太大的變化,但是相對(duì)于WebWork,Struts 2的變化很小。
4.1.3 Spring
Spring 框架是一個(gè)分層架構(gòu),由 7 個(gè)定義良好的模塊組成。Spring 模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方式,組成 Spring 框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。[7]
4.2 MVC模式的Java主流框架整合簡(jiǎn)介
為了更好的實(shí)現(xiàn)MVC設(shè)計(jì)模式的分層思想,適應(yīng)不同軟件開(kāi)發(fā)的具體情況,建立框架結(jié)構(gòu)清晰、代碼低耦合高內(nèi)聚的軟件系統(tǒng)成為了業(yè)內(nèi)追求的目標(biāo),為了更好的達(dá)成這個(gè)目標(biāo)推出了Java框架整合技術(shù)。[11]下面以主流的框架整合技術(shù)作簡(jiǎn)要說(shuō)明。
最初是Struts+ Spring + Hibernate,接著演變?yōu)镾truts2 + Spring + Hibernate,后來(lái)隨著Spring的強(qiáng)大以及Struts框架上的漏洞等問(wèn)題,演變成為了Spring + SpringMVC + Hibernate/Mybatis。上述幾種框架整合方案中都實(shí)現(xiàn)了視圖層、控制層、模型層的應(yīng)用程序分層功能,Struts/Struts2/SpringMVC負(fù)責(zé)視圖層,Spring框架負(fù)責(zé)控制層并整合其他框架,Hibernate/Mybatis框架負(fù)責(zé)模型層的數(shù)據(jù)操作功能,三大框架通過(guò)不的搭配方式都實(shí)現(xiàn)了MVC設(shè)計(jì)模式的低耦合、易維護(hù)和可擴(kuò)展的分層思想。
5 結(jié)語(yǔ)
本文從抽象和宏觀的角度討論了MVC設(shè)計(jì)模式在JavaWeb開(kāi)發(fā)中的影響和作用。從設(shè)計(jì)模式的概念談起,引入MVC設(shè)計(jì)模式的概念、功能作用和執(zhí)行過(guò)程,進(jìn)而探討了MVC設(shè)計(jì)模式思想在JavaWeb三層架構(gòu)中的作用,在Java框架中具體應(yīng)用的影響和滲透,從而實(shí)現(xiàn)了MVC設(shè)計(jì)模式分層設(shè)計(jì)的低耦合、高內(nèi)聚、易維護(hù)和可擴(kuò)展的核心思想。
參考文獻(xiàn):
[1]鐘茂生,王明文.軟件設(shè)計(jì)模式及其使用[J].計(jì)算機(jī)應(yīng)用,2002(08):3235.
[2]任中方,張華,閆明松,陳世福.MVC模式研究的綜述[J].計(jì)算機(jī)應(yīng)用研究,2004(10):14+8.
[3]陳業(yè)恩.基于MVC模式的Web軟件系統(tǒng)開(kāi)發(fā)框架設(shè)計(jì)與實(shí)現(xiàn)[J].信息系統(tǒng)工程,2015(06):37.
[4]陳輝.軟件工程中的解耦核心技術(shù)MVC和三層架構(gòu)比較[J].廊坊師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2014,14(04):4446.
[5]孫亞志.淺談Java web技術(shù)structs2框架的MVC模式[J].數(shù)字技術(shù)與應(yīng)用,2013(05):208.
[6]耿偉,劉振海,孫磊.Struts2框架技術(shù)的研究與分析[J].電腦知識(shí)與技術(shù),2008(33):13121313+1317.
[7]張宇,王映輝,張翔南.基于Spring的MVC框架設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2010,36(04):5962.
[8]吳茂昌,陽(yáng)玉琴.基于MVC模式的Java主流框架整合技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2009,37(10):9193+111.
作者簡(jiǎn)介:張雪敏(1981),男,漢族,江蘇蘇州人,在職研究生在讀,講師,研究方向?yàn)橛?jì)算機(jī)軟件開(kāi)發(fā)。