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