有幾年沒有關注技術了,最近有點時間想把技術從新撿起來,藉着重構手上的一個後臺管理框架的機會將微軟新的幾種技術所有應用一下,從目的上來說並無但願能對涉及的技術有很深刻的瞭解,因此這個系列的文章(篇幅不會太長)更多的是思考這些新技術在什麼場景中使用的問題。
涉及的工具及技術:Visual Studio 2013 、 asp.net mvc 5 、 entity framework 6.0.一、 JQuery 2.0.三、 LigerUI 1.2.2
想重構手上的後臺管理框架,是由於隨着業務經驗的積累,不少業務邏輯有了改進,隨之對應的後臺數據庫結構有了不少改善,但那套框架是.net 2.0時代建立的,且不是由我一人建立的,先後通過好幾個團隊、好幾個項目的修改,要想在數據庫結構上應用這些改善要解決的問題太多了,並且技術自己更新、淘汰就比較快不是,既然有點時間,何不用新技術來重建,一是能夠跟上時代步伐,二也可使得積累的業務邏輯經驗沉澱下來。
正由於本次重構的出發點是想進行數據結構的改善,手上現有這套框架經歷的幾個團隊水平都不算低,在軟件重用上花費的精力也不算少,但出於不少客觀因素的關係,"最大程度的代碼重用、以最小的代碼變化來適應各類需求變動"這樣的目的彷佛難以達到(在一個甚至幾個團隊環境中,考慮團隊成員更換頻繁的狀況下來達到這個目的,而不是以單我的在至關長的一段時間內達到這個目的),本次重構的目的之一是改善前端展現層如何快速適應數據層發生的變化,因此首先考慮MVC設計模式。早在十年前就已經接觸過MVC概念了,但不是在微軟體系內,做爲微軟技術路線的旅行者,一直沒有將此概念應用到實際項目中,而今終於有機會了。html
MVC做爲一種設計模式,比其餘設計模式更"難以捉摸",好比你去比較Java平臺的衆多MVC框架的實現作法與.net平臺MVC框架的實現作法,不一樣框架對MVC的詮釋不同,做爲一個初學者你搞不清楚到底哪一種作法是正確的(或者說更正宗的),即使是在.net平臺上,在微軟官方能找到的資料中也是存在相似這樣的"難以捉摸"的地方,舉個例子:前端
上圖應當是微軟中國(也多是其某個合做夥伴)對MVC設計模式的一些詮釋,圖中講到"Model被Controller更新後,會直接通知View並更新顯示",asp.net mvc 5的實際狀況倒是Model和View是沒有通訊的,都是Controller經過調用IView接口來通知View更新,且Controller並無將Model直接傳遞給View,而是複製一份後將複製品傳遞給View。從這個角度來說:asp.net mvc 5實際上是MVP設計模式而不是MVC設計模式。你也許據說過另一個概念"MVC2",根據相關概念解釋:MVC2與MVC的區別就是Model和View是否通訊,由此又能夠判斷所謂"MVC2"模式其實就是"MVP"模式。而後還有MOVE模式,該模式添加了一個Event來單獨處理Model、Controller、View之間的通訊。固然針對MVP和MVC也有另一個應用說法:上圖中的MVC模式適合於CS結構軟件,而MVP模式適合於BS結構軟件,這樣倒也能解釋通asp.net mvc 5中Model和View是沒有通訊的。數據庫
我還看到過一個分析cocoa框架中對MVC的詮釋,核心概念以下圖所示:Model和View是徹底隔離。設計模式
另外,關於View的更新是經過Model發出仍是經過Controller發出除了CS/BS結構的考慮外,減小代碼冗餘也是考慮因素之一(老實說這個因素我沒理解到其含義,不過這篇文字最後一句話:因此,我以爲,不去完全的MVC,不去完全的脫耦,改成由controller先改變model,再由controller直接去改變view,要省很多代碼和時間,固然換來的弊處就是controller必需要依附於view的存在了。。。 看看asp.net mvc的Controller如何定位到View的默認規則,可不就是依附於View了嘛)。數據結構
到底什麼是MVC設計模式以及該如何應用此設計模式呢?我在WIKI百科上找到了MVC的定義,自我小結:在設計軟件架構時,只要存在將軟件系統分紅模型(Model)、視圖(View)和控制器(Controller)三個部分,即爲應用了MVC設計模式(這經過選擇一個MVC實現框架便可輕鬆達到),但這還不夠,在設計、開發軟件的整個過程當中時刻注意MVC的兩個應用目標:MVC模式的目的是實現一種動態的程序設計,使後續對程序的修改和擴展簡化,而且使程序某一部分的重複利用成爲可能。除此以外,此模式經過對複雜度的簡化,使程序結構更加直觀。(這第二個步驟能夠說是我整理這份學習筆記的重點所在,就是我後面說起的"代碼結構組織")架構
.net 平臺上的MVC實現框架已經有不少可選擇的了,對框架選擇的因素有不少,好比對MVC實現的完全程度、處理性能等等,我沒有也不打算對目前主流的MVC框架進行這樣的挑選,經驗告訴我當你選擇一個框架應用到實際項目時,你老是有機面對這個框架的一些不足或者說缺陷之處的,花點時間,不足和缺陷都能解決,因此我採用了官方的MVC框架。
mvc
做爲asp.net mvc 5的初學者,官方教程是精練的。 網上大部分教程都是引用的這套教程,so 不用浪費時間去搜索。框架
在2011年下半年的時間,我投入了3個月的時間策劃開一個小吃店,雖然最後因爲發生一些變故沒有作成,但總算對開一家餐飲店的整個策劃過程有了比較深刻的瞭解,回頭想一想一家餐廳的運做採用MVC模式是比較好管理的(是否利於產生盈利這個不說),一家餐廳要想有持續的客源,廚師是最重要的,作的菜品能符合客戶的胃口才能讓客戶持續來店,這個廚師就是MVC的Model,顧客來店經過菜單點菜,這個菜單就是MVC的View,顧客點菜後由服務員下單,這個服務員就是MVC的Controller,服務員下單通知廚師作菜,廚師只負責作好菜,菜是給哪一個顧客作的無論,由服務員(也就是Controller)來負責上菜。 這就是MVC模式的核心:Model負責數據的處理,Controller負責調度和控制,View負責展現數據給用戶。asp.net