標籤:style blog http color os io strong 檔案
套種間作,也挺有意思的——近來學習感悟。DRP學習的同時,折騰了點以前不曾學習但是卻很多次耳聞過的東西——Asp.Net中的MVC架構模式。
一、是什嗎?
MVC,即(Model-View-Controller,模型—視圖—控制器模式),和三層類似,用於表示一種軟體架構模式。在這種模式下,將系統的實現分為模型Model,視圖View,控制器Controlller。其中Model:對資料庫的操作和一般的商務邏輯。View:負責做出和使用者互動的顯示;Controller:處理Request和Response請求,是View層訪問Model層的中介。
二、具體實現。
通過一個具體的例子來看MVC的具體實現
首先:建立一個MVC 3 web應用程式
PS:MVC3和MVC4,我查閱了相關的資料,自己的理解是:在整體的架構和實現上沒有太大的變化,變化的只是其中具體的一個類或者介面等變化。
因為其大致流程是Request請求——→Controller——→Model然後返回給View進行顯示,所以從最底層開始實現。
1)Model
在Model檔案夾內建立一個Login_BS類。因為只是簡單實現,所以並沒有進行對資料庫進行操作,只是瞭解MVC實現流程和原理。
<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"> </span><span style="font-size:14px;">public class Login_BS { public bool Login(string username, string password) { if (username == "1" && password == "1") { return true; } else { return false; } } }</span></span>
2)Controllers
然後在Controllers 檔案夾上右鍵,添加控制器
注意:其中Controller前面部分為改控制器被調用的名稱,也就是表單提交的地方為Login
其具體代碼如下:
<span style="font-size:18px;"> </span><span style="font-family:KaiTi_GB2312;font-size:14px;">public class LoginController : Controller { // // GET: /Login/ public ActionResult Index() { return View(); } [AcceptVerbs(HttpVerbs.Post)]//表單提交方式 public void index(string username, string password) { Models.Login_BS loginbs = new Models.Login_BS(); //username = Request.QueryString["username"];這是get方式提交擷取資料 //password = Request.QueryString["password"]; if (loginbs.Login(username, password)) { Response.Write("登陸成功" + username); } else { Response.Write("登入失敗" + username); } } }</span><span style="font-size:18px;"></span>
然後在其中的Index()方法右鍵添加視圖
之後,在View檔案夾下面,會自動多出一個Login檔案夾,在Login檔案下面,會有一個名稱為Index(添加視圖時自己取得名字)尾碼名為cshtml的檔案,這就是我們添加的控制器所對應的View視圖。添加具體的表單和控制項:
具體代碼如下:
3)View
<span style="font-family:KaiTi_GB2312;font-size:14px;">View視圖代碼:@{ Layout = null;}<!DOCTYPE html><html><head> <title>Index</title></head><body> <div> <form action="/Login" method="post"> <p>使用者名稱:<input type="text" name="username" /></p> <p>密碼:<input type="password" name="password" /></p> <p> <input type="submit" value="登陸" /></p> </form> </div></body></html></span>
4、自己理解
直接運行程式,我們會發現404頁面,為什麼明明有View視圖卻不顯示?其實,這涉及到MVC模式的具體分工問題。就像在DRP中Model2模式和同學討論的那樣:嚴格 model2模式(MVC)模式下JSP直接繪製好的頁面是不存在的?因為每個需要顯示的頁面,都必須經由一個servlet進行處理之後才由jsp進行繪製出來,也就是不訪問servlet,就不會有對應的jsp繪製好的Html頁面(純屬自己的理解,如有不同意見可以交流)。回到Asp.net 中,MVC中,使用者訪問的地址並不映射到伺服器中對應的檔案,而是映射到對應Control裡對應的ActionMethod,由ActionMethod來決定返回使用者什麼樣的資訊。而把使用者訪問的地址對應到對應的Action(當然也可以是對應的檔案)的工作有路由系統完成,這其中許多複雜的處理由.net自動完成,而開發人員需要告訴.net使用者的訪問地址和對應Action的具體映射關係。我們直接運行程式,並沒有映射到對應的Action方法,因此顯示404頁面也就很正常了。
如果我們想要顯示出具體頁面。需要再地址欄中加入對應的請求存取方法Action方法就可以了,也就是我們表單提交的地址/Login結果就可以出來了。
三、對比三層:
一個很明顯的區別:相對比與三層,MVC架構模式中,是沒有aspx.cs檔案的。這也是MVC模式極力避免的。因為如果頁面如果有代碼,就自然包含了邏輯,那麼就不是MVC了。在MVC裡面,視圖(View)顧名思義,只是顯示內容的一個載體,它自己要不要顯示,要顯示什麼內容,全部由控制器(Controller)決定。這樣最明顯的一個好處就是:實現View和Controllers的解耦。
另一個在於實現原理(流程)的不同:
一般aspx實現:
而MVC則是:
保留一個問題:View是經過Controller的‘同意’和Model互動?還是View和Controller互動,而Controller和Model互動?