作為一個開發者,我們不希望技術很快的更新,這是因為我們還沒有完全掌握原來技術的基礎上,又要掌握新的技術,作為天天忙忙碌碌的程序員,我們不希望還要額外的時間來學習,尤其是當我們的年齡,逐漸的變大的時候,但是有時候跟上時代的步伐也會給我們帶來很多的好處,我今天要說的主題就是讓我們從MVC 2 升級到
MVC3 吧,因為他帶給我們太多的是驚喜,而不是學習的苦惱。
可能有的園友要嗤之以鼻了,每個技術的更新都會帶來新的學習點,我們總是要不斷的學習來跟上他們,我們會很累的?的確,作為一名程序員,我們每天總是睡得很晚,起的很早,很多人喜歡叫我們夜貓子,因為只有在夜深人靜的時候,我們才能投入精神來學習而不被打擾。但是就算我們不想每天這么累,我建議每個MVC人員,從MVC 2 升級到MVC 3 吧,因為他能改善我們很多的工作時間,增加工作效率,甚至會減少很多bug。你不信,那么我們就一起來分析一下,究竟是升級MVC 3帶來的好處多,還是浪費我們學習的時間多吧。
asp.net MVC 2發布已經過去了很長時間了,我們也是從它開始來真正的開發我們的網站應用程序的,那么我們想一下,MVC 2 帶給我們的有哪些不便之處呢?我來
列舉幾個比較重要的缺點吧。
- 如果你想在MVC 2中控制每個Action 的執行是否會出現異常,你會怎么做呢?你可能的做法就是定義一個可以處理異常的Attribute,然后分別應用到每個Action或者是Controller上,來捕獲出現的異常信息?或者還有一種方法就是定義一個基類,讓所有的Controller都繼承自這個基類,而我們在基類中捕獲異常。據我個人所知,大多數人采用的也就是這兩種處理異常的方式,但是我們來考慮一下它的缺點。第一個處理異常的方式很明顯就是啰嗦,第二個呢,使我們在Web form時代通用的方式,肯定不錯。但是我們從另一個方面來想一下,如果說我們除了要捕獲異常信息之外,還要添加驗證,那么應該怎么做呢?
C#是單繼承的,這個問題留給園友們來思考?在MVC 3中這個方式得到了解決,就是全局Attribute - 在MVC 2中,如果你想添加一個后台管理系統,你會怎么辦呢?其實這個有一個很好的解決辦法,就是另外添加一個MVC 應用程序,用來作為后台管理系統?其實這真的是很好的處理方式,雖然我個人沒有采用MVC 2開發過任何的系統,但是我還是非常欣賞這種折中的處理方式。但是這同樣帶來了另外一個問題,所有的資源文件得不到重用,甚至是css文件?你不得不重新建立各個目錄來進行存放,還有一個非常直接但是非常重要的問題擺在了面前?htmlhelper類可以在后台管理系統中訪問到前台頁面嗎?我們可以在同一個IIS目錄下訪問這兩個不同的應用程序嗎?我想是不能的,首先htmlHelper類中的方法是無法應用到前台頁面的,還有在同一個地址中是不可能訪問到這兩個不同的應用程序的。這會帶來非常嚴重的問題,畢竟在后台無法訪問到前面頁面就是客戶無法接受的問題?我們又能如何處理呢?MVC 3中對應的就是Area
- Razor視圖也是一個我們不得不提的重要因素,我們都知道MVC 2遵循的是web form時代的<%%>方式,這令我們在前台構造復雜的邏輯分離時是十分痛苦的?如果說你想在前台顯示一個列表,那么foreach是我們都會采用的方式,我們知道在foreach中我們會使用到多少個<%%>,這會令我們的程序非常難懂,並且非常容易出錯。而Razor視圖就是利用@符號作為處理方式,簡潔的方式絕對是我們想象不到的好用,只要你用了它,相信你會愛上他。
- MVC 3 使用到了Nuget,這是一個非常好的擴展插件,可以自動更新我們程序的引用到它的各個地方,甚至包括web.config配置文件。
- 在MVC 3中母板頁沒有了.master,所有文件的后綴名都是.cshtml,這當然會使我們收益,畢竟只要我們願意,可以指定任何文件作為母板頁,哪怕只是為了單純的嵌套使用。
- MVC 3增強了htmlHelper類,讓我們的開發更加的流暢。
- 依賴注入一直是我比較喜歡研究的一門技術,當然我現在還沒有完全的入門依賴注入,但是我深刻的感受到MVC 3對依賴注入的完美支持,只要你願意,任何IOC框架都可以應用到MVC 3程序中,從而實現更好的替換功能。
說了這些MVC 2中 相對MVC 3所不具有的缺點,相信你也可以更加感受到MVC 3真的值得我們去學習,雖然說現在MVC 4已經出來了,但是我還是建議你學習一下MVC 3,因為越級的學習會給我們以后的深入帶來很大的困擾。雖然說我介紹的很大概,但是我想同是作為程序員的你,一定可以理解我說的是什么意思。尤其是MVC 3 所帶來的全局Attribute以及Area兩種技術的更新就可以讓我們有足夠的勇氣去面對升級帶來的任何麻煩。相信我吧,升級一下自己,帶來的可能是更大的收獲。
最后,展示一下MVC 3的razor語法,相信你會深深的愛上它。
1 @{ 2 Layout = "~/views/shared/_layout.cshtml"; 3 } 4 @using MvcWeb.Extensions 5 <!DOCTYPE html> 6 <html> 7 <head> 8 <title>Index</title> 9 <script src="http://www.cnblogs.com/Scripts/jquery-1.5.1.js" type="text/javascript"></script> 10 <script type="text/javascript" src="@Url.Content("http://www.cnblogs.com/Scripts/jquery-1.5.1-vsdoc.js")"></script> 11 <script type="text/javascript" src="@Url.Content("http://www.cnblogs.com/scripts/jquery.validate.js")"></script> 12 </head> 13 <body> 14 <div> 15 <form id="form" action="" method="post"> 16 <input type="text" id="user.Name" name="user.Name" /> 17 @{ this.Jquery().Validations().Required("user.Name", "用戶名是必填的 親");} 18 <select name="user.Gender"> 19 <option value="">Please select...</option> 20 <option value="1">Male</option> 21 <option value="2">Femle</option> 22 </select> 23 @{ this.Jquery().Validations().Required("user.Gender", null);} 24 <input type="text" name="user.Email" /> 25 @{this.Jquery().Validations().Element("user.Email").Required("郵箱是必填的").Email("請填寫正確的郵箱格式");} 26 <input type="submit" value="提交" /> 27 </form> 28 @{ 29 @:fdjkfdjkf 30 // hjkhkjhkj@:fdfdfdf 31 <text> 32 dsdsd 33 dsdsd 34 dsdsd 35 </text> 36 37 } 38 </div> 39 <script type="text/javascript"> 40 @Html.Raw(this.Jquery().Validations().ToScripts("#form")) 41 </script> 42 </body> 43 </html>
razor語法一定會帶給你很多的驚喜