再敘AngularJS

上一篇講到AngularJS是在三月17號,已經過去整整3個月。

當時我也只是AngularJS的入門程序員,文章涉及的內容也只是針對框架的特性和Backbone進行簡單的對比。


在當時,我正在進行內部平臺從Backbone向AngularJS的轉型。那時Backbone版的平臺,已經趨於穩定,並且已經服務於多家客戶。


很多讀者會有疑問:既然Backbone版的平臺已經穩定且有成功案例,爲什麼要使用AngularJS再大費周章的進行替換呢?


主要有幾個考慮的因素:

1. Backbone思想簡單,但操作起來極其臃腫。通過View,Model外加Collection類進行分層,代表着一個頁面必須有二個類。在企業級應用中,一個頁面有多個Model很正常,有些Model還有子表進行關聯....

這樣下來,一個模塊的類就極其多,類的數量增多,系統的複雜程度就會呈幾何倍數增長。


2. 依賴關係生硬。一個龐大的架構設計,如果依賴不處理好,最後的結局一定是一盤美味的“意大利麪”。Backbone並沒有處理模塊依賴的功能,完全由用戶自由設計!我當時使用RequireJS來處理。

由於RequireJS是動態加載器,不屬於嚴格的模塊管理器,一直感覺平臺像是東拼西湊然後用強力膠水粘起來的...


3.代碼所到之處,全是DOM操作。雖然有jQuery利器,但是真正寫起來還是很痛。寫過JS的程序員都懂的,一個簡單的彈出框,蒐集值以及還原值,至少需要2個小時 ....而且代碼極其容易出現Bug,讓人極其煩躁。


連着被幾個使用Backbone版的平臺客戶虐完之後,我下定決心一定要改變這種局面。


經過三個月的奮鬥,AngularJS的平臺已經完成,並且成功實施2個客戶!開發速度較之之前有過之而無不及,特別在面對特殊,複雜的需求時,更是得心應手。

平臺的各個模塊被AngularJS的依賴注入完美的結合在一起,以我目前的見識,我認爲平臺的前端已經達到一個完美的地步。


我如此推崇AngularJS,很多同學可能不屑一顧,網上有太多黑AngularJS的,很多人也都看到過!彆着急,我們先來看看AngularJS是如何整合前臺的。


自帶模塊化機制

AngularJS內置模塊化功能,使模塊化簡單清晰。這個非常重要,如果你的代碼完全看不出模塊化,等到龐大到一定程度,那種酸爽,誰寫代碼誰知道!


Controller包羅萬象

AngularJS拋棄View、Model的概念,使用Controller處理所有的邏輯。

說簡單點,就是整合MVC在Controller中,每個模塊只需要Controller即可處理,大大減少了類的數量。

並且Controller使用樹形結構維護,這樣不同Controller之間就可以通過樹來進行溝通,很好解決了Controller間的交互。


NgModel數據雙向綁定

有了它,再也不用DOM操作。Controller中都是邏輯代碼,瞬間清爽很多。這點也是很多被其他框架攻擊的地方,認爲它太過消耗性能。


Service外加Injector

每個平臺,都有基礎服務,或者說公共代碼。Service很好的解決了這部分問題,外加AngularJS提供的依賴注入Injector,很好解決了模塊依賴,使整個平臺很好的結合在一起。


Directive指令

指令相當於Web組件,很好的解決了複用的問題,簡化了前臺的開發。AngularJS的組件不同於JSF的服務器組件,是完全本地化,而且可以很靈活的進行定製,完全不用擔心組件的過度臃腫。


AngularJS使用如上幾點,基本涵蓋了前臺的各個方面,同時,AngularJS開放的機制以及豐富的社區,即使遇到遺漏點,也會很快找到解決方案。


當然AngularJS也有不適合的情景!如果你開發的是企業系統,郵件系統,我會力薦使用它。但是如果你開發的是網頁遊戲,還是不要用AngularJS了,它的雙向綁定在處理複雜DOM時,確實會拖慢效率的。

那麼,複雜這個邊界該如何定義呢?我看過一篇文章,說是2000個,即頁面雙向綁定變量達到2000個,我想沒有企業系統會達到這個邊界。


最近很多的前端框架一下子湧現出來,例如Facebook的ReactJS,去哪兒網的Avalon,knockoutjs,Vuejs...

本着技術人員的通病,我一個一個研究過,發現或多或少都有一些問題。而所有這些框架,都喜歡和AngularJS對比一番!

要麼說比AngularJS雙向綁定效率高,要麼說比AngularJS輕量。這讓我想起了小米手機說我比蘋果便宜,錘子手機說我比蘋果好看...


我不否認AngularJS的缺點,更不否認這些這些框架的優點,但這麼對比,就好比孫臏賽馬,用自己的上等馬對比別人的下等馬,有耍流氓嫌疑...這更會誤導一些淳樸的程序員。


不說別的,一個框架,我認爲最最最最重要的是社區和更新速度!單就這兩點,AngularJS甩那些框架一條街!


所以如果你要選擇一款Web框架,力薦AngularJS!











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章