摘要:通過(guò)對(duì)WebFrom 發(fā)展歷程的研究,分析web開(kāi)發(fā)的要素對(duì)webForm優(yōu)缺點(diǎn)的分析,對(duì)微軟提出MVC新的編程方式的討論。對(duì)比MVC、ASP.net MVC的特點(diǎn),探討ASP.net MVC編程模式發(fā)展前景和新的編程模式的出現(xiàn)對(duì)原有的編程模式的影響。
關(guān)鍵詞:ASP.net ;MVC ;WebFrom
中圖分類(lèi)號(hào):TP311.10 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 15-0000-02
1 WebForm 、MVC、ASP.NET MVC各自特點(diǎn):
從.net 平臺(tái)誕生伊始,.net平臺(tái)就提出WebForm的計(jì)算機(jī)程序設(shè)計(jì)理念:
1.1 WebForm是微軟推出的針對(duì)web開(kāi)發(fā)的一套網(wǎng)頁(yè)開(kāi)發(fā)機(jī)制。
通過(guò)從邏輯上對(duì)代碼進(jìn)行橫向切割,將顯示(view)和控制(controller)組件封裝在一起,避免了開(kāi)發(fā)者對(duì)底層程序流轉(zhuǎn)機(jī)制的理解。WebForm的出現(xiàn)降低了Web開(kāi)發(fā)的難度,帶動(dòng)了組件開(kāi)發(fā)熱潮。
WebFrom下的組件封裝特性雖然降低了開(kāi)發(fā)難度,但卻帶了兩個(gè)主要缺點(diǎn):代碼執(zhí)行效率低下和深度開(kāi)發(fā)難度提高。代碼的封裝是靠犧牲代碼的運(yùn)行效率來(lái)提高開(kāi)發(fā)效率,犧牲的運(yùn)行效率通過(guò)提高硬件性能來(lái)補(bǔ)償。然而在網(wǎng)絡(luò)開(kāi)發(fā)中,網(wǎng)絡(luò)硬件由于要考慮兼容性且是國(guó)家基礎(chǔ)設(shè)施的一部分,因此其更新的靈活性遠(yuǎn)不如單機(jī)系統(tǒng)。網(wǎng)絡(luò)硬件的瓶頸和WebFrom組件對(duì)運(yùn)行效率的要求之間存在的矛盾難以解決。
在WebFrom控件封裝機(jī)制下,由于開(kāi)發(fā)者普遍對(duì)程序底層流程缺乏了解,而WebFrom控件的開(kāi)發(fā)過(guò)程卻較為復(fù)雜。這就造成了使用WebFrom開(kāi)發(fā)模式入門(mén)容易,精通難的現(xiàn)象。
此外,WebFrom編程中,邏輯與顯示的分離并不徹底,代碼與頁(yè)面具有較高的耦合度,造成前后臺(tái)開(kāi)發(fā)難以配合、單元測(cè)試不易進(jìn)行的問(wèn)題。
1.2 MVC是在Smalltalk-80的GUI設(shè)計(jì)中使用的一種軟件設(shè)計(jì)模式。MVC 模式把數(shù)據(jù)處理、程序輸入輸出控制以及數(shù)據(jù)表示分離開(kāi)來(lái),并且描述了不同部分的對(duì)象之間的通信方式,使它們不必卷入彼此的數(shù)據(jù)模型和方法中,從而使程序結(jié)構(gòu)變得清晰而靈活。
MVC強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC的應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。MVC組件的功能和相互關(guān)系如圖1所示:
MVC本來(lái)是用于桌面應(yīng)用程序的,但由于MVC模式在Web應(yīng)用中組件化開(kāi)發(fā)的優(yōu)勢(shì)十分明顯,近幾年被廣泛的應(yīng)用到Web開(kāi)發(fā)中。對(duì)傳統(tǒng)的Web應(yīng)用程序來(lái)說(shuō),視圖就是由HTML元素組成的界面。使用MVC的重要優(yōu)勢(shì)就是能為Web處理很多不同的視圖,從而增加顯示的靈活性。
傳統(tǒng)的Web應(yīng)用程序大都是使用像ASP這樣的過(guò)程化技術(shù)來(lái)創(chuàng)建的。它們將數(shù)據(jù)庫(kù)查詢語(yǔ)句這樣的數(shù)據(jù)層代碼和HTML這樣的表示層代碼混合在一起。即使對(duì)于經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,將數(shù)據(jù)從表示層分離也不容易做到。使用MVC可以從根本上強(qiáng)制性的將它們分開(kāi),盡管構(gòu)造MVC應(yīng)用程序需要一些額外的工作,但是它帶來(lái)的好處是無(wú)庸質(zhì)疑的。
(1)低耦合性:視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼而不用重新修改模型和控制器代碼,同樣,一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動(dòng)MVC的模型層即可。(2)高重用性和可適用性:隨著技術(shù)的不斷進(jìn)步,現(xiàn)在需要用越來(lái)越多的方式來(lái)訪問(wèn)應(yīng)用程序。MVC模式允許使用各種不同樣式的視圖來(lái)訪問(wèn)同一個(gè)服務(wù)器端的代碼。(3)快速開(kāi)發(fā)能力:使用MVC模式可以使程序員集中精力開(kāi)發(fā)業(yè)務(wù)邏輯而界面設(shè)計(jì)人員則集中精力于表現(xiàn)形式上,從而實(shí)現(xiàn)系統(tǒng)前端和后端的并行開(kāi)發(fā),可以大大縮減系統(tǒng)開(kāi)發(fā)時(shí)間。(4)可維護(hù)性。分離視圖層和業(yè)務(wù)邏輯層使得兩者之間只通過(guò)接口相互聯(lián)系,因此對(duì)任何部分內(nèi)部的都不會(huì)影響到其他部分。這就使得基于MVC模式開(kāi)發(fā)的Web應(yīng)用具有更高的可維護(hù)性和可擴(kuò)展性。(5)有利于軟件工程化管理。由于不同的層各司其職,每一層不同的應(yīng)用具有某些相同的特征,有利于通過(guò)工程化、工具化管理程序代碼。
在原有的WebForm體系如果想按照MVC的思想構(gòu)建是沒(méi)有什么問(wèn)題。但是WebForm體系按照MVC思想構(gòu)建會(huì)帶來(lái)幾個(gè)問(wèn)題:
代碼的增加。在MVC下的涉及的文件數(shù)量較原有webForm多很多。
顯示層和控制層較難分離。Webform體系下后臺(tái)代碼和前臺(tái)耦合很強(qiáng)。很難做到精細(xì)的分離。
層次構(gòu)建的需要前期進(jìn)行大量工作量的準(zhǔn)備工作。
控件的問(wèn)題。WebForm有著大量的服務(wù)器控件,這對(duì)于web開(kāi)發(fā)有著較大的性能消耗。這會(huì)帶來(lái)效率和開(kāi)發(fā)速度的問(wèn)題。
1.2 ASP.NET MVC
ASP.NET MVC的出現(xiàn)就是微軟為了應(yīng)對(duì)webForm開(kāi)發(fā)在以上問(wèn)題的軟肋,在傳統(tǒng)webForm開(kāi)發(fā)方式下提供了另一種web開(kāi)發(fā)方式的選擇,它的出現(xiàn)并不是為了替代原有成熟的webForm開(kāi)放模式,而是針對(duì)純粹的Web開(kāi)發(fā)。ASP.NET MVC的出現(xiàn)就是為了web開(kāi)發(fā)而誕生。他的view層對(duì)應(yīng)原來(lái)的模式webForm下的模板,Controller對(duì)應(yīng)后臺(tái)代碼。而且,view層和Controller的耦合程度較低,有利于web開(kāi)發(fā)的分工合作。
2 從webForm方式開(kāi)發(fā)轉(zhuǎn)向ASP.net MVC 方式開(kāi)發(fā)的成本考慮
ASP.net MVC 對(duì)于web開(kāi)發(fā)來(lái)說(shuō)有著諸多優(yōu)勢(shì):
View層和Controller的分離性,對(duì)應(yīng)web開(kāi)發(fā)的兩大方面。前臺(tái)效果和后臺(tái)邏輯、數(shù)據(jù)控制。View和Controller的分離有利于web的分工開(kāi)發(fā)。從使用HTML控件的方式來(lái)看, webForm開(kāi)發(fā)時(shí)的控件在ASP.NET MVC中仍可使用(微軟的建議是不要用)。這樣就兼顧了程序開(kāi)發(fā)效率和程序運(yùn)行效率的平衡,為開(kāi)發(fā)這提供了較高的靈活性,也降低了從WebFrom模式轉(zhuǎn)向ASP.NET MVC架構(gòu)的成本。ASP.NET MVC提出了便捷的數(shù)據(jù)顯示模式。webForm時(shí)期,顯示動(dòng)態(tài)的內(nèi)容用的更多的是服務(wù)器控件,在不使用服務(wù)器控件的情況下這種模式下的顯示就很不方便。MVC下,提出了更加有效和靈活的數(shù)據(jù)顯示方法。這有利于開(kāi)發(fā)便利性和系統(tǒng)效率的平衡。Asp.net MVC 的優(yōu)點(diǎn)不少,但從webForm轉(zhuǎn)到MVC的開(kāi)發(fā),其成本體現(xiàn)在以下幾個(gè)方面:MVC本身結(jié)構(gòu)固有的問(wèn)題,導(dǎo)致文件數(shù)量的增加,項(xiàng)目管理的難度和成本隨著上升。而由于MVC體系較為復(fù)雜,MVC的入門(mén)難度和學(xué)習(xí)成本比起webForm體系來(lái)說(shuō)大了很多。從ASP.net MVC本身來(lái)說(shuō),ASP.NET MVC是微軟已經(jīng)創(chuàng)建的一個(gè)基本web項(xiàng)目框架。在基于默認(rèn)的ASP.NET MVC進(jìn)行開(kāi)發(fā)時(shí),可以獲得較高的效率和較低的成本。但如果需要對(duì)默認(rèn)框架進(jìn)行改寫(xiě),雖然系統(tǒng)提供了重寫(xiě)的途徑,但無(wú)疑將會(huì)付出巨大的成本。
3 結(jié)語(yǔ):
WebForm開(kāi)發(fā)模式經(jīng)過(guò)十余年的發(fā)展,已經(jīng)較為成熟,基于WebForm的程序開(kāi)發(fā)仍有其強(qiáng)勁的需求。而ASP.net MVC模式是對(duì)web開(kāi)發(fā)的另一種選擇,目前正處于快速發(fā)展的過(guò)程中。由于ASP.NET MVC的開(kāi)發(fā)方式相對(duì)于原有的WebForm模式發(fā)生了巨大的變化,開(kāi)發(fā)模式的轉(zhuǎn)變將開(kāi)發(fā)周期和開(kāi)發(fā)成本產(chǎn)生較大的影響。這可能是阻礙ASP.NET MVC大范圍普及的一個(gè)重要因素。
相對(duì)于WebForm,ASP.NET MVC在Web開(kāi)發(fā)領(lǐng)域更加專業(yè)化,對(duì)Web開(kāi)發(fā)的效率提升非常明顯,尤其是對(duì)于開(kāi)發(fā)存在大量用戶界面,并且邏輯復(fù)雜的大型應(yīng)用程序,MVC將會(huì)使軟件在健壯性、代碼重用和結(jié)構(gòu)方面上一個(gè)新的臺(tái)階。盡管在最初構(gòu)建MVC模式框架時(shí)會(huì)花費(fèi)一定的工作量,但從長(zhǎng)遠(yuǎn)的角度來(lái)看,它會(huì)大大提高后期軟件開(kāi)發(fā)的效率。
參考文獻(xiàn):
[1]MVC http://zh.wikipedia.org/wiki/MVC.
[2]JesseLiberty著,劉基誠(chéng),李瑜勝,劉衛(wèi)衛(wèi),譯.Programming C#中文版[M].電子工業(yè)出版社.
[3]楊曉軍,琴方著.MVC web 開(kāi)發(fā)學(xué)習(xí)實(shí)錄[M].清華大學(xué)出版社,2011,07.
[4]加洛韋(Jon Galloway),Phil Haack、Brad Wilson,K.Scott Allen ASP.NET MVC 3 高級(jí)編程[M].清華大學(xué)出版社,2012,06.
[作者簡(jiǎn)介]
周泉(1982-)男,漢族,四川瀘州,助教,研究方向:信息化建設(shè)與信息化安全