官术网_书友最值得收藏!

第3章 MVC

假如問一群程序員,誰是最有價值廚師?他們大概會在短暫的茫然后給出五花八門的答案,男朋友、老婆、老媽或者某家快餐連鎖店的幕后大廚。顯然他們對這個概念還不太熟悉,但是如果把它翻譯成英文Most Valuable Cook,有些人或許就明白了。假如還不知道,說出它的簡稱,他們就一定很熟悉——MVC。

MVC可謂是圖形用戶界面軟件設計的標準模式。無論采用哪種編程語言,設計的是桌面端、Web還是移動端應用程序,采用的是流行的或冷門的開發框架,遵行MVC都幾乎是必然的。然而另一方面,就像一千個人眼中有一千個哈姆雷特,當人們談論MVC時,也像談論愛情一樣,所指千變萬化。

視圖沒有直接從模型獲得更新,而是由控制器修改視圖,這違背了MVC的設計原則。控制器應該對視圖的細節一無所知。事件響應程序可以直接寫在視圖內。控制器負責系統的業務邏輯。諸如此類都是關于MVC的斷言。但在其他地方,又可以看到截然相反的論斷。這些被我當成反面教材列出來的話語可不是初學者的臆想,它們都是來自Google相關關鍵字搜索的結果前列,有的是Oracle官方網站上對MVC的介紹文章,有的是俄亥俄州立大學計算機科學與工程系的主題講義,有的是編程社區網站的熱門和高票文章。代碼樣例是程序員學習的重要來源。不幸的是,同樣來自Google搜索結果排名前列的MVC的樣例代碼卻良莠不齊。很難相信這些代碼的作者會以他們對MVC那樣的理解和代碼風格在實際項目開發中應用MVC模式。

【注:上述部分論斷和代碼樣例的出處www.oracle.com/technetwork/articles/javase/index-142890.html

http://web.cse.ohio-state.edu/~rountev/421/lectures/lecture23.pdf

http://www.austintek.com/mvc/

http://www.codeproject.com/Articles/613682/Your-first-program-using-MVC-pattern-with-Csharp-W

http://www.codeproject.com/Articles/383153/The-Model-View-Controller-MVC-Pattern-with-Csharp】

平心而論,會有這樣的現象,部分原因是MVC不像Singleton之類的設計模式那樣具體,沒有精確的代碼對應形式,而且在廣泛的應用中,根據環境要求和不同編程語言的特點也產生了不少變體,如MVP(Model-View-Presenter),從而令得不同情況下三個組件所負責的功能和實現方式有所出入。這樣的彈性和變化進一步讓MVC在傳播過程中,像故事的流傳一樣衍變出形形色色的版本,又像娛樂節目上經常出現的接力猜謎,每一個人從上一個人的動作中猜出在模擬什么東西,再以自己的方式表演給下一個人看,到最后一個人猜出的結果往往和最初風馬牛不相及。要應對這樣的困境,最好的方法是不僅知其然,還要知其所以然。本章將從簡單程序的結構入手,逐步分析一個自然合理的架構隨著程序的演變,如何發展成MVC。從分析MVC架構體現的設計理念辨清它的真相,理解在它的種種變體中哪些不變的部分是邏輯要求的必然結果,又有哪些部分可以適應需求、環境和實現技術做出靈活的選擇。這之后再討論桌面、移動和Web環境下MVC的具體實現。

主站蜘蛛池模板: 科技| 平邑县| 井研县| 葫芦岛市| 泰来县| 禄劝| 渭源县| 阳江市| 安丘市| 行唐县| 大新县| 彩票| 汝城县| 闵行区| 高雄市| 沾益县| 含山县| 察雅县| 无为县| 泸定县| 兴安盟| 宜兴市| 讷河市| 内乡县| 福鼎市| 图木舒克市| 汶川县| 六盘水市| 巧家县| 昭觉县| 浙江省| 鄂托克前旗| 云阳县| 澄江县| 桐庐县| 准格尔旗| 格尔木市| 融水| 师宗县| 龙泉市| 绥德县|