|
1. MVC模式
MVC模式是一種軟件架構(gòu)模式。它把軟件系統(tǒng)分為三個(gè)部分:模型(Model),視圖(View)和控制器(Controller)。MVC模式最早由Trygve Reenskaug在1974年提出,是施樂(lè)帕羅奧多研究中心(Xerox PARC)在20世紀(jì)80年代為程序語(yǔ)言Smalltalk發(fā)明的一種軟件設(shè)計(jì)模式。MVC模式的目的是實(shí)現(xiàn)一種動(dòng)態(tài)的程序設(shè)計(jì),使后續(xù)對(duì)程序的修改和擴(kuò)展簡(jiǎn)化,并且使程序某一部分的重復(fù)利用成為可能。除此之外,此模式通過(guò)對(duì)復(fù)雜度的簡(jiǎn)化,使程序結(jié)構(gòu)更加直觀。軟件系統(tǒng)通過(guò)對(duì)自身基本部份分離的同時(shí)也賦予了各個(gè)基本部分應(yīng)有的功能。
模型(Model) “數(shù)據(jù)模型”(Model)用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法。“模型”有對(duì)數(shù)據(jù)直接訪問(wèn)的權(quán)力,例如對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。“模型”不依賴(lài)“視圖”和“控制器”,也就是說(shuō),模型不關(guān)心它會(huì)被如何顯示或是如何被操作。但是模型中數(shù)據(jù)的變化一般會(huì)通過(guò)一種刷新機(jī)制被公布。為了實(shí)現(xiàn)這種機(jī)制,那些用于監(jiān)視此模型的視圖必須事先在此模型上注冊(cè),從而,視圖可以了解在數(shù)據(jù)模型上發(fā)生的改變.
視圖(View) 視圖層能夠?qū)崿F(xiàn)數(shù)據(jù)有目的的顯示(理論上,這不是必需的)。在視圖中一般沒(méi)有程序上的邏輯。為了實(shí)現(xiàn)視圖上的刷新功能,視圖需要訪問(wèn)它監(jiān)視的數(shù)據(jù)模型(Model),因此應(yīng)該事先在被它監(jiān)視的數(shù)據(jù)那里注冊(cè)。
控制器(Controller) 控制器起到不同層面間的組織作用,用于控制應(yīng)用程序的流程。它處理事件并作出響應(yīng)。“事件”包括用戶的行為和數(shù)據(jù)模型上的改變。
在最初的JSP網(wǎng)頁(yè)中,像數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句這樣的數(shù)據(jù)層代碼和像HTML這樣的表示層代碼混在一起。經(jīng)驗(yàn)比較豐富的開(kāi)發(fā)者會(huì)將數(shù)據(jù)從表示層分離開(kāi)來(lái),但這通常不是很容易做到的,它需要精心地計(jì)劃和不斷的嘗試。MVC從根本上強(qiáng)制性地將它們分開(kāi)。盡管構(gòu)造MVC應(yīng)用程序需要一些額外的工作,但是它帶給我們的好處是毋庸置疑的。
首先,多個(gè)視圖能共享一個(gè)模型。如今,同一個(gè)Web應(yīng)用程序會(huì)提供多種用戶界面,例如用戶希望既能夠通過(guò)瀏覽器來(lái)收發(fā)電子郵件,還希望通過(guò)手機(jī)來(lái)訪問(wèn)電子郵箱,這就要求Web網(wǎng)站同時(shí)能提供InterNET界面和WAP界面。在MVC設(shè)計(jì)模式中,模型響應(yīng)用戶請(qǐng)求并返回響應(yīng)數(shù)據(jù),視圖負(fù)責(zé)格式化數(shù)據(jù)并把它們呈現(xiàn)給用戶,業(yè)務(wù)邏輯和表示層分離,同一個(gè)模型可以被不同的視圖重用,所以大大提高了代碼的可重用性。
其次,控制器是自包含(self-contained)指高獨(dú)立內(nèi)聚的對(duì)象,與模型和視圖保持相對(duì)獨(dú)立,所以可以方便的改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。例如,把數(shù)據(jù)庫(kù)從MySQL移植到Oracle,或者把RDBMS數(shù)據(jù)源改變成LDAP數(shù)據(jù)源,只需改變控制器即可。一旦正確地實(shí)現(xiàn)了控制器,不管數(shù)據(jù)來(lái)自數(shù)據(jù)庫(kù)還是LDAP服務(wù)器,視圖都會(huì)正確地顯示它們。由于MVC模式的三個(gè)模塊相互獨(dú)立,改變其中一個(gè)不會(huì)影響其他兩個(gè),所以依據(jù)這種設(shè)計(jì)思想能構(gòu)造良好的少互擾性的構(gòu)件。
此外,控制器提高了應(yīng)用程序的靈活性和可配置性。控制器可以用來(lái)連接不同的模型和視圖去完成用戶的需求,也可以構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。給定一些可重用的模型和視圖,控制器可以根據(jù)用戶的需求選擇適當(dāng)?shù)哪P蜋C(jī)型處理,然后選擇適當(dāng)?shù)牡囊晥D將處理結(jié)果顯示給用戶。
2. Hello world 之 ASP.NET MVC 3
如果還沒(méi)有開(kāi)發(fā)環(huán)境,先在這里下載Visual Studio 2010和mvc3. 新建一個(gè)MVC3項(xiàng)目,選擇Razor模板引擎。VS已經(jīng)建好了基本的目錄結(jié)構(gòu)和兩個(gè)默認(rèn)的頁(yè)面。
查看下文件的代碼,可以看到Controllers中的類(lèi)是處理一些邏輯過(guò)程,最終返回View用來(lái)生成頁(yè)面。Model中的代碼表示的是數(shù)據(jù)和一些基本的驗(yàn)證規(guī)則,View通過(guò)Model中的數(shù)據(jù)來(lái)填充。運(yùn)行下程序,可以看到一個(gè)基本的網(wǎng)站。MVC網(wǎng)站的運(yùn)行過(guò)程是這樣的:
1. 當(dāng)?shù)谝粋€(gè)請(qǐng)求從客戶端發(fā)起的時(shí)候,首先執(zhí)行的是Global.asax中的Application_Start()方法來(lái)完成一些初始化工作,其中重要的一步是RegisterRoutes方法,這個(gè)方法指定了如何將url映射到具體的方法上,稍后詳解。
2. 根據(jù)第一步中指定的映射表生成一個(gè)RouteData對(duì)象,利用這個(gè)對(duì)象來(lái)創(chuàng)建一個(gè)RequestContext對(duì)象。
3. MvcRouteHandler創(chuàng)建一個(gè)MvcHandler,并將RequestContext對(duì)象傳給MvcHandler。
4. MvcHandler對(duì)象利用RequestContext對(duì)象確定一個(gè)IControllerFactory對(duì)象來(lái)創(chuàng)建Controller對(duì)象。
5. MvcHandler對(duì)象調(diào)用Controller對(duì)象的Execute()方法。
6. Controller的ControolerActionInvoker對(duì)象決定調(diào)用controller的哪個(gè)具體的action方法。
7. Action方法接受用戶參數(shù),執(zhí)行方法,返回一個(gè)Result類(lèi)型的對(duì)象。
右擊Controller文件夾,新建一空Controller,命名為HelloWorld,將代碼改為如下:
public class HelloWorldController : Controller
{
public string Index()
{
return "Hello world";
}
public string Hello()
{
return "Hello everyone";
}
public string Hello2(string name)
{
return "Hello to you " + name;
}
}
NET技術(shù):ASP.NET MVC 入門(mén)介紹 (上),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。