作者:nuysoft/高雲/nuysoft@gmail.com
聲明:本文為原創文章,如需轉載,請注明來源並保留原文鏈接。
代碼混亂
前端攻城師是個新興的職業,一直以來前端開發面臨着以下的問題:
- 數據模型、業務模型不清晰
- 代碼代碼復用率低,很多時候是Ctrl-C/V
- 代碼可讀性和可維護性低
- 難以滿足需求的變化,特別是前端需求的頻繁變化
jQuery在一定程度上改善了這種狀態,解決了原生JS代碼寫起來繁瑣的問題,但jQuery畢竟是一個以DOM查找和操作為主的庫,這樣的定位使得jQuery的大型前端項目中只能作為底層庫使用,應用代碼依然是雜亂無章,不得不依賴於攻城師的技術水准和職業素養。
而MVC模型通過細分模型、視圖、控制器的職責,約定開發方式,讓代碼開發和管理變得條理、清晰。JS應用程序的本質是事件驅動,而MVC適合於事件驅動的場景,兩者不謀而合。MVC在大部分語言的框架中都有實現,JavaScript雖然在這方面起步較晚,但隨着前端和JS越來越被認可和重視,JSMVC框架的出現成為必然。
Backbone正是一個優秀的JSMVC框架。
傳說中的單頁面應用程序OPOA
在JS半死不活的年代,面臨着隨時被Flash吃掉的恐懼和各種市場唱衰,以及大公司富客戶端產品的競爭,像Sun的JavaFX、微軟的Sliveright,AJAX的異步請求和動態加載,可以說是力挽狂瀾,有着擁立之功。
在AJAX被發掘之后,編寫類似桌面程序的單頁面應用程序OPOA“似乎”成為了可能,但是隨后發現不能支持瀏覽器歷史的前進、后退、收藏,使得OPOA成了各種DEMO秀,一直沒有流行起來。
直到對URL hash的挖掘(location.hash),OPOA才變得可行。hash雖然不會在請求時傳給服務器,但是在瀏覽器中,改變hash卻可以前進、后退、收藏(在低版本的IE中可以通過iframe實現)。
hash驅動正是Backbone事件驅動模型中一種,在某些應用中可能是最重要的一種。
Backbone還有模型事件驅動和視圖事件驅動, Backbone也不僅僅應用在OPOA中,在后邊的章節將逐步介紹。
還不夠完美
還有模塊依賴、動態載入、模板等等需要去研究和學習,這些概念和框架已經不是什么新鮮事務了,但是如何將各種專注的庫、框架、工具集成,變成完整、可靠、穩定、高效開發、可以成熟應用的系統解決方案,是前端領域需要繼續研究和實踐的課題。
我也是剛開始接觸和學習,有感於最近這些知識受到的沖擊,羅哩羅嗦的寫了這些。下邊開始分析我對MVC在瀏覽器中應用的認識。
MVC的優點和缺點
MVC可以簡化重構、解耦合、提高代碼復用、適應變化、易讀、較少維護代碼、提高可維護性,因為是結構化模塊化開發,還可以實現代碼自動生成。但是MVC也會導致復雜度上升、運行效率下降。
真的解耦了嗎?只是盡可能的解耦,事實上也不可能完全解耦。模型與視圖的關系在實際應用中的關系可能更加復雜,視圖也不僅僅負責渲染、交互,還可能需要模板引擎、數據解析、適配等等。
為了更好的分析JSMVC的實現,我們先對MVC在JS中的職責進行梳理。請看下節 Backbone源碼分析系列之JSMVC。