穆海明 劉盼 齊斌
摘 要:隨著國(guó)內(nèi)電商平臺(tái)的發(fā)展,網(wǎng)站的需求變得越來(lái)越大,開發(fā)網(wǎng)站的技術(shù)雖然很多,但真正主流的不過只有幾種,而ASP.NET MVC便是很好的一種選擇。ASP.NET MVC它是微軟的一個(gè)web開發(fā)框架,融合了敏捷開發(fā)的思想與技術(shù)和asp.net平臺(tái)的精華部分,正是設(shè)計(jì)網(wǎng)站的最好方式之一。本文將介紹ASP.NET MVC框架的內(nèi)容,以及如何便捷地開發(fā)網(wǎng)站,僅此希望這門技術(shù)為IT行業(yè)的發(fā)展帶來(lái)巨大進(jìn)步。
關(guān)鍵詞:MVC;控制器;視圖;模型;路由;三層架構(gòu)
1 MVC模式
1.1 控制器(Controller)
MVC模式中的控制器(Controller)主要負(fù)責(zé)響應(yīng)用戶的輸入,并且在響應(yīng)時(shí)修改模型(model)。通過這種方式,MVC模式中的控制器主要關(guān)注的是應(yīng)用程序流、輸入數(shù)據(jù)的處理,以及對(duì)相關(guān)視圖輸出數(shù)據(jù)的提供。從本質(zhì)上來(lái)講,控制器只是簡(jiǎn)單的C#類,在控制器中的每一個(gè)public方法都稱為一個(gè)動(dòng)作方法,即可以用某個(gè)URL通過web來(lái)調(diào)用它,以執(zhí)行一個(gè)動(dòng)作。MVC約定,把控制器都放在一個(gè)名為Controller的文件夾中,這是Visual Studio在建立項(xiàng)目時(shí)為用戶自動(dòng)創(chuàng)建的。這項(xiàng)約定雖然不一定要遵循,單遵循著一約定會(huì)為開發(fā)帶來(lái)很大的便捷,也就是常說(shuō)的約定大于配置。
1.2 視圖(View)
視圖的職責(zé)是向用戶提供用戶界面。當(dāng)控制器針對(duì)被請(qǐng)求的URL執(zhí)行完合適的邏輯后,就將要顯示的內(nèi)容委托給視圖。不像基于文件的Web框架,比如ASP.NET Web Forms和PHP,視圖本身不會(huì)被直接訪問,瀏覽器不能直接指向一個(gè)視圖并渲染它。相反,視圖總是被控制器渲染,因?yàn)榭刂破鳛樗峁┝艘秩镜臄?shù)據(jù)。目前為止控制器操作只是簡(jiǎn)單的調(diào)用了return View()來(lái)進(jìn)行渲染,還不需要指定視圖的文件名??梢赃@么做,是因?yàn)樗鼈兝昧薃SP.NET MVC框架的一些隱式約定,這些約定定義了視圖選擇邏輯。記住之前在控制器所說(shuō)的“約定大于配置”在這里依然適用。這是ASP.NET MVC相對(duì)于Form的進(jìn)步之處,也是它的特色。
Razor視圖引擎是ASP.NET MVC 3中新擴(kuò)展的內(nèi)容,并且他是默認(rèn)視圖引擎,Razor為視圖提供一種精簡(jiǎn)的語(yǔ)法,最大限度地減少了語(yǔ)法和額外的字符。這樣就有效地減少了語(yǔ)法障礙,并且在視圖標(biāo)記語(yǔ)言中也沒有新的語(yǔ)法規(guī)則。Razor的設(shè)計(jì)理念是簡(jiǎn)單直觀的,對(duì)于大多數(shù)應(yīng)用,我們不必關(guān)心語(yǔ)法,只需要在插入代碼時(shí),輸入HTML和@符號(hào)。
1.3 模型(Models)
模型是一個(gè)比較抽象的概念,主要是利用模型對(duì)象來(lái)構(gòu)建ASP.NET MVC應(yīng)用程序,可以使用C#語(yǔ)言編寫模型定義類,然后根據(jù)指定的模型類型使用基架生成應(yīng)用程序的其他部分。這便是模型最常用也是最基礎(chǔ)的一種存在。
在MVC中,控制器是C#類,通常派生于System.Web.MVC.Controller,開發(fā)者自己創(chuàng)建的每一個(gè)控制器通常都是從這個(gè)Controller派生而來(lái)的,派生而來(lái)的類中的每一個(gè)public方法都稱為一個(gè)動(dòng)作方法,它通過ASP.NET 路由系統(tǒng)與一個(gè)可配置的URL相關(guān)聯(lián)。當(dāng)一個(gè)請(qǐng)求被發(fā)送到與一個(gè)動(dòng)作方法相關(guān)聯(lián)的URL時(shí),便執(zhí)行控制器類中的語(yǔ)句,以進(jìn)行域模型上的一些操作,然后選擇一個(gè)視圖來(lái)顯示給客戶端。這就是控制器、模型及視圖之間的交互。
2 路由
2.1 URL
URI代表統(tǒng)一資源標(biāo)識(shí)符。URL是標(biāo)識(shí)了一個(gè)資源的字符串。從技術(shù)角度看,所有URL都是URI。W3C認(rèn)為“URL是一個(gè)正式的概念,但它非常有用:URL是URI的一種類型,它通過表示自身的主要訪問機(jī)制來(lái)標(biāo)識(shí)資源”。換句話說(shuō),URI是某種資源的標(biāo)識(shí)符,而URL則為獲取該資源提供了具體的信息。
2.2 URL模式
路由系統(tǒng)用一組路由來(lái)實(shí)現(xiàn)它的功能。這些路由共同組成了應(yīng)用程序的URL架構(gòu)(Schema)或方案(Scheme),這種URL架構(gòu)(或方案)是應(yīng)用程序能夠識(shí)別并能對(duì)之作出響應(yīng)的一組URL。不需要手動(dòng)輸入打算支持的各個(gè)URL,而是讓每一條路由都包含一個(gè)URL模式,用它與一個(gè)輸入U(xiǎn)RL進(jìn)行比較。如果該模式與這個(gè)URL匹配,那么它(URL模式)便被路由系統(tǒng)用來(lái)對(duì)這個(gè)URL進(jìn)行處理。
3 三層架構(gòu)的網(wǎng)站設(shè)計(jì)
所謂的三層指的是,表現(xiàn)層,業(yè)務(wù)層和數(shù)據(jù)層,它的優(yōu)點(diǎn)是每一層僅用少量的代碼實(shí)現(xiàn)各層的功能,非常靈活,如果把數(shù)據(jù)訪問代碼與業(yè)務(wù)邏輯層分離,當(dāng)數(shù)據(jù)庫(kù)服務(wù)器更改后,你只需要更改數(shù)據(jù)訪問的代碼,因?yàn)闃I(yè)務(wù)邏輯層是不變的。邏輯層和數(shù)據(jù)層的分離后讓你后期的改動(dòng)變得更加方便,便于開發(fā)和后期調(diào)試。而且這種架構(gòu)使得程序員之間可以出現(xiàn)協(xié)助工作,這種更高效的開發(fā)便是如今的主流,下面具體介紹每層具體的功能。
3.1 表現(xiàn)層(Presentation Layer)
表現(xiàn)層用于用戶接口的展示,以及用業(yè)務(wù)層的類和對(duì)象來(lái)“驅(qū)動(dòng)”這些接口。在ASP.NET中,該層包括aspx頁(yè)面、用戶控制、服務(wù)器控制以及某些與安全相關(guān)的類和對(duì)象。
3.2 業(yè)務(wù)層(Business Tier)
業(yè)務(wù)層用于訪問數(shù)據(jù)層,從數(shù)據(jù)層取數(shù)據(jù)、修改數(shù)據(jù)以及刪除數(shù)據(jù),并將結(jié)果返回給表現(xiàn)層。在ASP.NET中,該層包括使用SqlClient或OleDb從SQL Server或Access數(shù)據(jù)庫(kù)取數(shù)據(jù)、更新數(shù)據(jù)及刪除數(shù)據(jù),并把取得的數(shù)據(jù)放到DataReader或DataSet中返回給表現(xiàn)層。返回的數(shù)據(jù)也許只有一個(gè)整形數(shù)字,比如一個(gè)表的行記錄數(shù)目,但這也要用數(shù)據(jù)層的數(shù)據(jù)進(jìn)行計(jì)算。
3.3 數(shù)據(jù)層(Data Tier)
數(shù)據(jù)層是數(shù)據(jù)庫(kù)或者數(shù)據(jù)源。在.NET中,通常它是一個(gè)SQL Server或Access數(shù)據(jù)庫(kù),但不僅限于此兩種形式,它還可能是Oracle,mySQL,但ASP.NET MVC最好就是用SQL Server。
參考文獻(xiàn):
[1] Adam Freeman(美).精通ASP.NET MVC4[M].李萍,徐燕萍,林逸,譯.人民郵電出版社,2014.
[2] Jon Galloway,Brad Wilson,K.Scott Allen,David Matson(美) . ASP.NET MVC 5高級(jí)編程[M].孫元帥,譯.清華大學(xué)出版社,2015.
作者簡(jiǎn)介:穆海明(1994—),男,天津人,沈陽(yáng)理工大學(xué)本科在讀。
劉盼(1994—),男,山西運(yùn)城人,沈陽(yáng)理工大學(xué)本科在讀。
齊斌(1994—),男,遼寧盤錦人,沈陽(yáng)理工大學(xué)本科在讀。