MVC的概念及MVC 3.0开发环境
摘要
MVC即: Model(模型), View(視圖), Controller(控制器)
Model:模型對(duì)象是實(shí)現(xiàn)應(yīng)用程序數(shù)據(jù)域邏輯的應(yīng)用程序部件。?通常,模型對(duì)象會(huì)檢索模型狀態(tài)并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。?例如,Product?對(duì)象可能會(huì)從數(shù)據(jù)庫(kù)中檢索信息,操作該信息,然后將更新的信息寫回到 SQL Server 數(shù)據(jù)庫(kù)內(nèi)的 Products 表中。
在小型應(yīng)用程序中,模型通常是概念上的分離,而不是實(shí)際分離。?例如,如果應(yīng)用程序僅讀取數(shù)據(jù)集并將其發(fā)送到視圖,則該應(yīng)用程序沒(méi)有物理模型層和關(guān)聯(lián)的類。?在這種情況下,數(shù)據(jù)集擔(dān)當(dāng)模型對(duì)象的作用。
Controller:控制器是處理用戶交互、使用模型并最終選擇要呈現(xiàn)的視圖來(lái)顯示 UI 的組件。?在 MVC 應(yīng)用程序中,視圖僅顯示信息;控制器則用于處理和響應(yīng)用戶輸入和交互。?例如,控制器處理查詢字符串值,并將這些值傳遞給模型,而模型可能會(huì)使用這些值來(lái)查詢數(shù)據(jù)庫(kù)。?就是程序通過(guò)Controller從瀏覽器中接受命令,決定用它做什么,并返反饋給用戶。即獲取數(shù)據(jù),然后將數(shù)據(jù)綁定到頁(yè)面控件的這個(gè)業(yè)務(wù)邏輯。
View:視圖是顯示應(yīng)用程序用戶界面 (UI) 的組件。?通常,此 UI 是用模型數(shù)據(jù)創(chuàng)建的。?Products 表的編輯視圖便是一個(gè)視圖示例,該視圖基于?Product?對(duì)象的當(dāng)前狀態(tài)顯示文本框、下拉列表和復(fù)選框。?就是我們的aspx頁(yè)面,注意這是一個(gè)不包含后臺(tái)代碼文件的aspx頁(yè)面。在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ì)和測(cè)試,使得整個(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í),通過(guò)使用這種分離方式,可以幫助您化繁為簡(jiǎn),因?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),組件模型和頁(yè)面回發(fā)給自己的應(yīng)用是離不開的。
Asp.net mvc是Url驅(qū)動(dòng)的編程模型。是界面構(gòu)建模式mvc在Asp.net的實(shí)現(xiàn)。
Asp.net Mvc不是用來(lái)代替Asp.net WebForms,而是對(duì)web開發(fā)提供一種新的開發(fā)模式。你可以選擇適合自己或團(tuán)隊(duì)開發(fā)的模式來(lái)進(jìn)行開發(fā)。
微軟開發(fā)ASP.NET MVC框架的是基于以下一些目標(biāo)的:
1)各層分工明確,可測(cè)試性(支持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ù)邏輯代碼是不完全的分離,只是通過(guò)代碼隱藏文件把兩者給分開了,UI與業(yè)務(wù)邏輯的捆綁依然在代碼隱藏文件中清晰可見。
2)代碼的分離實(shí)現(xiàn)了低耦合。清晰的代碼,易于維護(hù)。
3)簡(jiǎn)單。相對(duì)Asp.net web Form,沒(méi)有了復(fù)雜的服務(wù)器控件(如GridView),沒(méi)有了事件驅(qū)動(dòng);取而代之的是html標(biāo)簽(微軟鼓勵(lì)這樣做)、Url驅(qū)動(dòng)。
4)對(duì)HTML的可控性增強(qiáng)。
5)更加友好的URL便于SEO
6)生成的HTML頁(yè)面更加簡(jiǎn)單和清晰,因?yàn)闆](méi)有了ViewState.
7)默認(rèn)就對(duì)JS框架的支持
?
ASP.NET WebForms優(yōu)點(diǎn):
1)為HTTP提供了一種事件模型,對(duì)任何開發(fā)人員都可以很容易上手。
2)提供了大量的標(biāo)準(zhǔn)控件和第三方控件使得開發(fā)更加簡(jiǎn)單易行。
3)由于使用了ViewState機(jī)制使得狀態(tài)管理變得簡(jiǎn)單。
那么我們開發(fā)時(shí)該怎么對(duì)二者進(jìn)行選擇呢?
| ? | TDD | Control HTML | Data-Driver | Like Winforms | RAD |
| MVC | 是 | 是 | 否 | 否 | 否 |
| WebForms | 否 | 否 | 是 | 是 | 是 |
?
?
?
?
ASP.NET MVC 框架具有以下功能:
-
應(yīng)用程序任務(wù)(輸入邏輯、業(yè)務(wù)邏輯和 UI 邏輯)的分離、可測(cè)試性和測(cè)試驅(qū)動(dòng)的開發(fā) (TDD)。?MVC 框架中的所有核心協(xié)定都基于接口并且可使用 mock 對(duì)象進(jìn)行測(cè)試,mock 對(duì)象是模仿應(yīng)用程序中實(shí)際對(duì)象的行為的模擬對(duì)象。?您可以對(duì)應(yīng)用程序進(jìn)行單元測(cè)試,而不必在 ASP.NET 進(jìn)程中運(yùn)行控制器,這使得單元測(cè)試既快速又靈活。?您可以使用任何與 .NET Framework 兼容的單元測(cè)試框架。
-
可擴(kuò)展和可插入的框架。?設(shè)計(jì) ASP.NET MVC 框架的組件的目的是為了可以輕松地替換或自定義它們。?您可以插入自己的視圖引擎、URL 路由策略、操作方法參數(shù)序列化以及其他組件。?ASP.NET MVC 框架還支持使用依賴項(xiàng)注入 (DI) 和控制反轉(zhuǎn) (IOC) 容器模型。?DI 使您能夠?qū)?duì)象注入到類中,而不是依靠類來(lái)創(chuàng)建對(duì)象本身。?IOC 指定某個(gè)對(duì)象是否需要其他對(duì)象,第一個(gè)對(duì)象應(yīng)該從配置文件之類的外部源中獲取第二個(gè)對(duì)象。?這樣,測(cè)試會(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 頁(yè)面(.aspx 文件)、用戶控件(.ascx 文件)和母版頁(yè)(.master 文件)標(biāo)記文件中的標(biāo)記用作視圖模板。?您可以將諸如嵌套母版頁(yè)、內(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 窗體頁(yè)面的 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ú)的類庫(kù)中。但是,在創(chuàng)建新應(yīng)用程序時(shí),您可以將類放在此處,然后在開發(fā)周期中稍后的某個(gè)時(shí)刻將其移動(dòng)到單獨(dú)的類庫(kù)中。
-
Scripts,建議在此位置存儲(chǔ)支持應(yīng)用程序的腳本文件。默認(rèn)情況下,此文件夾包含 ASP.NET AJAX 基礎(chǔ)文件和 jQuery 庫(kù)。
-
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)用程序的母版頁(yè)放在 Shared 文件夾中。
?
除了使用前面列出的文件夾之外,MVC Web 應(yīng)用程序還使用 Global.asax 文件中的代碼來(lái)設(shè)置全局 URL 路由默認(rèn)值,并且使用 Web.config 文件來(lái)
配置應(yīng)用程序。
?
運(yùn)行項(xiàng)目效果
?
?
可以看出該模板已經(jīng)集成了簡(jiǎn)單權(quán)限、模板及導(dǎo)航為一體的一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序
?
創(chuàng)建MVC 3.0空項(xiàng)目
?
?
可以看到MVC3.0的空項(xiàng)目里面除了基本的布局頁(yè)面錯(cuò)誤頁(yè)面及開始頁(yè)面其他都為空。
這就需要我們?cè)趯?shí)際操作的時(shí)候根據(jù)需要來(lái)添加。
如果直接運(yùn)行項(xiàng)目就會(huì)報(bào)錯(cuò)。。。。
?
細(xì)心的你此時(shí)會(huì)發(fā)現(xiàn),在Global.asax里面依然是默認(rèn)的起始頁(yè)
publicstaticvoid 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)值
);
}
?
我們可以看到Controller文件夾是空的,沒(méi)有什么關(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();
}
?
我沒(méi)可以看到上面的代碼返回的是一個(gè)ActionResult類型的View,但是我們還沒(méi)有建立與其對(duì)應(yīng)的視圖。。
所以我們讓他輸出一個(gè)字符串到頁(yè)面。。。
?
將代碼
?
public ActionResult Index(){
return View();
}
?
修改為
?
publicstring Index(){
return"Hello World";
}
?
運(yùn)行之后 一個(gè)簡(jiǎn)單的界面就出現(xiàn)了 。。。
?
?
?
原文地址:http://www.cnblogs.com/lukun/archive/2011/07/20/2111879.html
轉(zhuǎn)載于:https://www.cnblogs.com/xust/articles/2603950.html
總結(jié)
以上是生活随笔為你收集整理的MVC的概念及MVC 3.0开发环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CSS 颜色代码
- 下一篇: QT中个数据类型的转换