我要學(xué)ASP.NET MVC 3.0(二): MVC的概念及MVC 3.0開發(fā)環(huán)境摘要
MVC即: Model(模型), View(視圖), Controller(控制器)
Model:模型對(duì)象是實(shí)現(xiàn)應(yīng)用程序數(shù)據(jù)域邏輯的應(yīng)用程序部件。 通常,模型對(duì)象會(huì)檢索模型狀態(tài)并將其存儲(chǔ)在數(shù)據(jù)庫中。 例如,Product 對(duì)象可能會(huì)從數(shù)據(jù)庫中檢索信息,操作該信息,然后將更新的信息寫回到 SQL Server 數(shù)據(jù)庫內(nèi)的 Products 表中。
在小型應(yīng)用程序中,模型通常是概念上的分離,而不是實(shí)際分離。 例如,如果應(yīng)用程序僅讀取數(shù)據(jù)集并將其發(fā)送到視圖,則該應(yīng)用程序沒有物理模型層和關(guān)聯(lián)的類。 在這種情況下,數(shù)據(jù)集擔(dān)當(dāng)模型對(duì)象的作用。
Controller:控制器是處理用戶交互、使用模型并最終選擇要呈現(xiàn)的視圖來顯示 UI 的組件。 在 MVC 應(yīng)用程序中,視圖僅顯示信息;控制器則用于處理和響應(yīng)用戶輸入和交互。例如,控制器處理查詢字符串值,并將這些值傳遞給模型,而模型可能會(huì)使用這些值來查詢數(shù)據(jù)庫。 就是程序通過Controller從瀏覽器中接受命令,決定用它做什么,并返反饋給用戶。即獲取數(shù)據(jù),然后將數(shù)據(jù)綁定到頁面控件的這個(gè)業(yè)務(wù)邏輯。
View:視圖是顯示應(yīng)用程序用戶界面 (UI) 的組件。 通常,此 UI 是用模型數(shù)據(jù)創(chuàng)建的。 Products 表的編輯視圖便是一個(gè)視圖示例,該視圖基于 Product 對(duì)象的當(dāng)前狀態(tài)顯示文本框、下拉列表和復(fù)選框。 就是我們的aspx頁面,注意這是一個(gè)不包含后臺(tái)代碼文件的aspx頁面。在MVC3.0 View可以支持多視圖引擎。即aspx和cshtml
MVC(Model-View-Controller)在軟件工程中的一種設(shè)計(jì)模式.(他不僅僅是Asp.net Mvc,這只是他的一種實(shí)現(xiàn))他的主要設(shè)計(jì)目標(biāo)是把用戶接口和邏輯層進(jìn)行分離(低耦合),這樣開發(fā)人員可以更好的關(guān)注邏輯層的設(shè)計(jì)和測試,使得整個(gè)程序有個(gè)清晰的架構(gòu)。
如圖展示了MVC的關(guān)系
MVC 模式可以幫助您創(chuàng)建使應(yīng)用程序的不同方面(輸入邏輯、業(yè)務(wù)邏輯和 UI 邏輯)分離的應(yīng)用程序,同時(shí)可在這些元素之間提供松散耦合。 該模式指定每種邏輯在應(yīng)用程序中應(yīng)處的位置。 UI 邏輯位于視圖中。 輸入邏輯位于控制器中。 業(yè)務(wù)邏輯位于模型中。 在您生成應(yīng)用程序時(shí),通過使用這種分離方式,可以幫助您化繁為簡,因?yàn)樗梢允鼓鷤?cè)重于一次實(shí)現(xiàn)應(yīng)用程序的一個(gè)方面。 例如,您可以側(cè)重于獨(dú)立于業(yè)務(wù)邏輯的視圖。
MVC 應(yīng)用程序的這三個(gè)主要組件之間的松散耦合也可促進(jìn)并行開發(fā)。 例如,一個(gè)開發(fā)人員可以從事視圖方面的工作,第二個(gè)開發(fā)人員可以從事控制器邏輯方面的工作,第三個(gè)開發(fā)人員可以側(cè)重于模型中的業(yè)務(wù)邏輯。
Asp.net MVC與Asp.net WebForms比較和選擇
聯(lián)系:
WinForm -> Asp -> Asp.net Web Form -> Asp.net mvc
Asp.net Web Form繼承了WinForm的思想,是事件驅(qū)動(dòng)的編程模型。實(shí)現(xiàn)事件驅(qū)動(dòng),組件模型和頁面回發(fā)給自己的應(yīng)用是離不開的。
Asp.net mvc是Url驅(qū)動(dòng)的編程模型。是界面構(gòu)建模式mvc在Asp.net的實(shí)現(xiàn)。
Asp.net Mvc不是用來代替Asp.net WebForms,而是對(duì)web開發(fā)提供一種新的開發(fā)模式。你可以選擇適合自己或團(tuán)隊(duì)開發(fā)的模式來進(jìn)行開發(fā)。
微軟開發(fā)ASP.NET MVC框架的是基于以下一些目標(biāo)的:
1)各層分工明確,可測試性(支持TDD)
2)一個(gè)高擴(kuò)展的插件式的架構(gòu)
3)更友好的URLS,易于優(yōu)化SEO,同時(shí)對(duì)REST的支持。
4)可以繼續(xù)使用原有的Asp.net的一些特征。
5)對(duì)HTML代碼的完全可控性。
ASP.NET MVC優(yōu)點(diǎn):
1)界面代碼和業(yè)務(wù)邏輯代碼完全的分離。Asp.net Web Form中,界面代碼和業(yè)務(wù)邏輯代碼是不完全的分離,只是通過代碼隱藏文件把兩者給分開了,UI與業(yè)務(wù)邏輯的捆綁依然在代碼隱藏文件中清晰可見。
2)代碼的分離實(shí)現(xiàn)了低耦合。清晰的代碼,易于維護(hù)。
3)簡單。相對(duì)Asp.net web Form,沒有了復(fù)雜的服務(wù)器控件(如GridView),沒有了事件驅(qū)動(dòng);取而代之的是html標(biāo)簽(微軟鼓勵(lì)這樣做)、Url驅(qū)動(dòng)。
4)對(duì)HTML的可控性增強(qiáng)。
5)更加友好的URL便于SEO
6)生成的HTML頁面更加簡單和清晰,因?yàn)闆]有了ViewState.
7)默認(rèn)就對(duì)JS框架的支持
ASP.NET WebForms優(yōu)點(diǎn):
1)為HTTP提供了一種事件模型,對(duì)任何開發(fā)人員都可以很容易上手。
2)提供了大量的標(biāo)準(zhǔn)控件和第三方控件使得開發(fā)更加簡單易行。
3)由于使用了ViewState機(jī)制使得狀態(tài)管理變得簡單。
那么我們開發(fā)時(shí)該怎么對(duì)二者進(jìn)行選擇呢?
TDDControl HTMLData-DriverLike WinformsRAD
MVC是是否否否
WebForms否否是是是
ASP.NET MVC 框架具有以下功能:
應(yīng)用程序任務(wù)(輸入邏輯、業(yè)務(wù)邏輯和 UI 邏輯)的分離、可測試性和測試驅(qū)動(dòng)的開發(fā) (TDD)。 MVC 框架中的所有核心協(xié)定都基于接口并且可使用 mock 對(duì)象進(jìn)行測試,mock 對(duì)象是模仿應(yīng)用程序中實(shí)際對(duì)象的行為的模擬對(duì)象。 您可以對(duì)應(yīng)用程序進(jìn)行單元測試,而不必在 ASP.NET 進(jìn)程中運(yùn)行控制器,這使得單元測試既快速又靈活。 您可以使用任何與 .NET Framework 兼容的單元測試框架。
可擴(kuò)展和可插入的框架。 設(shè)計(jì) ASP.NET MVC 框架的組件的目的是為了可以輕松地替換或自定義它們。 您可以插入自己的視圖引擎、URL 路由策略、操作方法參數(shù)序列化以及其他組件。 ASP.NET MVC 框架還支持使用依賴項(xiàng)注入 (DI) 和控制反轉(zhuǎn) (IOC) 容器模型。 DI 使您能夠?qū)?duì)象注入到類中,而不是依靠類來創(chuàng)建對(duì)象本身。 IOC 指定某個(gè)對(duì)象是否需要其他對(duì)象,第一個(gè)對(duì)象應(yīng)該從配置文件之類的外部源中獲取第二個(gè)對(duì)象。 這樣,測試會(huì)更加輕松。
廣泛支持 ASP.NET 路由,ASP.NET 路由是一個(gè)功能強(qiáng)大的 URL 映射組件,它允許您生成具有易于理解和可搜索的 URL 的應(yīng)用程序。 URL 未必包含文件擴(kuò)展名,并且旨在支持非常適合搜索引擎優(yōu)化 (SEO) 和具象狀態(tài)傳輸 (REST) 尋址的 URL 命名模式。
支持將現(xiàn)有 ASP.NET 頁面(.aspx 文件)、用戶控件(.ascx 文件)和母版頁(.master 文件)標(biāo)記文件中的標(biāo)記用作視圖模板。 您可以將諸如嵌套母版頁、內(nèi)聯(lián)表達(dá)式(<%= %>)、聲明性服務(wù)器控件、模板、數(shù)據(jù)綁定、本地化等現(xiàn)有 ASP.NET 功能與 ASP.NET MVC 框架結(jié)合使用。
支持現(xiàn)有 ASP.NET 功能。 ASP.NET MVC 允許您使用一些功能,如 Forms 身份驗(yàn)證和 Windows 身份驗(yàn)證、URL 授權(quán)、成員資格和角色、輸出和數(shù)據(jù)緩存、會(huì)話和配置文件狀態(tài)管理、運(yùn)行狀況監(jiān)視、配置系統(tǒng)以及提供程序體系結(jié)構(gòu)。
前言
了解了MVC的概念之后。我們學(xué)習(xí)MVC 3.0需要搭建環(huán)境
可以登錄
http://www.asp.net/mvc下載安裝
或者下載MVC 3.0的離線安裝包
ASP.NET MVC 3 RTM也可以安裝VS 2010SP1 進(jìn)行離校安裝。
學(xué)習(xí)MVC 3.0項(xiàng)目模板
安裝好MVC 3.0 后就可以創(chuàng)建MVC3.0項(xiàng)目了
選擇項(xiàng)目模板和視圖引擎
VS 2010 MVC 3.0解決方案默認(rèn)
基于Razor視圖引擎:
基于ASPX視圖引擎:
默認(rèn)情況下,MVC 項(xiàng)目包括以下文件夾:
App_Data,這是數(shù)據(jù)的物理存儲(chǔ)區(qū)。此文件夾的作用與它在使用 Web 窗體頁面的 ASP.NET 網(wǎng)站中的作用相同。
Content,建議在此位置添加內(nèi)容文件,如級(jí)聯(lián)樣式表文件、圖像等。通常,Content 文件夾用于存儲(chǔ)靜態(tài)文件。
Controllers,建議在此位置存儲(chǔ)控制器。MVC 框架要求所有控制器的名稱均以“Controller”結(jié)尾,如 HomeController、LoginController 或 ProductController。
Models,這是為表示 MVC Web 應(yīng)用程序的應(yīng)用程序模型的類提供的文件夾。此文件夾通常包括定義對(duì)象以及定義與數(shù)據(jù)存儲(chǔ)交互所用的邏輯的代碼。通常,實(shí)際模型對(duì)象將位于單獨(dú)的類庫中。但是,在創(chuàng)建新應(yīng)用程序時(shí),您可以將類放在此處,然后在開發(fā)周期中稍后的某個(gè)時(shí)刻將其移動(dòng)到單獨(dú)的類庫中。
Scripts,建議在此位置存儲(chǔ)支持應(yīng)用程序的腳本文件。默認(rèn)情況下,此文件夾包含 ASP.NET AJAX 基礎(chǔ)文件和 jQuery 庫。
Views,建議在此位置存儲(chǔ)視圖。視圖使用 ViewPage (.aspx)、ViewUserControl (.ascx) 和 ViewMasterPage (.master) 文件,以及與呈現(xiàn)視圖相關(guān)的任何其他文件。在 Views 文件夾中,每個(gè)控制器都具有一個(gè)文件夾;該文件夾以控制器名稱前綴命名。例如,如果控制器名為 HomeController,則 Views 文件夾包含名為 Home 的文件夾。默認(rèn)情況下,當(dāng) ASP.NET MVC 框架加載視圖時(shí),它將在 Views\控制器名稱 文件夾中尋找具有請(qǐng)求的視圖名稱的 ViewPage (.aspx) 文件。默認(rèn)情況下,Views 文件夾中也有一個(gè)名為 Shared 的文件夾,但該文件夾不與任何控制器相對(duì)應(yīng)。Shared 文件夾用于存儲(chǔ)在多個(gè)控制器之間共享的視圖。例如,您可以將 Web 應(yīng)用程序的母版頁放在 Shared 文件夾中。
除了使用前面列出的文件夾之外,MVC Web 應(yīng)用程序還使用 Global.asax 文件中的代碼來設(shè)置全局 URL 路由默認(rèn)值,并且使用 Web.config 文件來
配置應(yīng)用程序。
運(yùn)行項(xiàng)目效果
可以看出該模板已經(jīng)集成了簡單權(quán)限、模板及導(dǎo)航為一體的一個(gè)簡單的ASP.NET應(yīng)用程序
創(chuàng)建MVC 3.0空項(xiàng)目
可以看到MVC3.0的空項(xiàng)目里面除了基本的布局頁面錯(cuò)誤頁面及開始頁面其他都為空。
這就需要我們?cè)趯?shí)際操作的時(shí)候根據(jù)需要來添加。
如果直接運(yùn)行項(xiàng)目就會(huì)報(bào)錯(cuò)。。。。
細(xì)心的你此時(shí)會(huì)發(fā)現(xiàn),在Global.asax里面依然是默認(rèn)的起始頁
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名稱
"{controller}/{action}/{id}", // 帶有參數(shù)的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數(shù)默認(rèn)值
);
}
復(fù)制代碼我們可以看到Controller文件夾是空的,沒有什么關(guān)于Home的字眼????難怪報(bào)錯(cuò)。。。
其實(shí)這是MVC的路由規(guī)則找不到HomeController的Index方法而已。。
關(guān)于路由請(qǐng)移步
我要學(xué)ASP.NET MVC 3.0(三): 初識(shí)Url映射潛規(guī)則Routing此時(shí)你可以新建一個(gè)Controller命名為HomeController
添加完控制器后默認(rèn)給出了起Index的方法。。。
public ActionResult Index()
{
return View();
}
復(fù)制代碼我沒可以看到上面的代碼返回的是一個(gè)ActionResult類型的View,但是我們還沒有建立與其對(duì)應(yīng)的視圖。。
所以我們讓他輸出一個(gè)字符串到頁面。。。
將代碼
public ActionResult Index()
{
return View();
}
復(fù)制代碼修改為
public string Index()
{
return "Hello World";
}
復(fù)制代碼運(yùn)行之后 一個(gè)簡單的界面就出現(xiàn)了 。。。
總結(jié)
說了這么多,回頭一看全都是廢話,沒有一句實(shí)用的。不過沒關(guān)系,板磚會(huì)很猛的哦。。
有了廢話才有了磚
有了磚才會(huì)有進(jìn)步!??!
下節(jié)預(yù)告
下節(jié)我們開始從路由Routing入手一步一步建立自己的MVC 3.0應(yīng)用程序。
請(qǐng)看
我要學(xué)ASP.NET MVC 3.0(三): 初識(shí)Url映射潛規(guī)則Routing作者:
記憶逝去的青春出處:
http://www.cnblogs.com/lukun/本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過
http://www.cnblogs.com/lukun/ 聯(lián)系我,非常感謝。