Angular 之我見

敘帝利發表於2020-08-31

很久沒有寫過技術軟文了,雖然 Angular 釋出已有四年,得到了越來越多人的關注,但是仍然有很多人不分青紅皁白的進行詆譭。我打算結合自己的經歷從客觀的角度說聊一聊我眼中的 Angular。

本人剛做前端接觸的是 jQuery,對 MVVM 庫和框架知之甚少,且身邊沒有獨當一面的大牛引領,全靠視訊教程和自己的摸索。後來做新專案也是選擇了 Vue 技術棧,主要是自己菜,害怕 hold 不住其它框架。再後來無意中接觸到 Angular,彷彿醍醐灌頂,完全被 Angular 文件吸引,感嘆其雙向繫結的設計巧思以及資料驅動的無窮魅力。

從我這幾年使用框架的經驗來看,前端框架的下限是一樣的,也就是說如果沒有統一的規範以及優秀的架構,所有框架都很容易寫出難以維護的垃圾程式碼。即使是 Angular,同樣也有這樣的問題(大部分是不熟悉 Angular 造成的),但是 Angular 最大的優勢是它的上限,只要參考官方風格指南的建議並且靈活運用依賴注入、響應式表單、攔截器等功能,系統維護及迭代都非常輕鬆。

從我自建的 Angular 學習交流群來看,現在想要學習 Angular 或者深入瞭解的朋友越來越多,但是仍然有很多人想盡各種理由為了黑而黑。本文簡單總結了一些常用的黑梗並從自己熟悉的角度進行反駁,希望喜歡 Angular 的朋友不忘初心,不要受這些觀點影響。

升級梗

AngularJS 到 Angular 的斷崖式升級太坑了!

AngularJS 和 Angular 本來就是兩個時代的框架,Angular 只是沿襲了 AngularJS 的設計理念,前端技術的飛速發展以及 Angular 超前的技術選型使得 1 到 2 的升級不可能是平滑的過度,而且 Angular 誕生的初衷就是摒棄 AngularJS 中陳舊的糟粕的技術實現。假如兩者真的沒有斷崖式更新的話,那麼 Angular 得到的吐槽和謾罵一定比現在更多。另外我想說一點,即使兩個框架存在巨大的鴻溝,但是官方依然給出了升級方案,我覺得這已經非常良心了。我相信從 AngularJS 升級到 Angular 顯然比換框架重構的代價低。

後端梗

Angular 不就是後端那一套嗎?

這個梗的影響力和殺傷力都稱得上 NO.1,就連 Vue 作者尤雨溪在 Angular 剛釋出時也甩了一個後端梗進行冷嘲熱諷。

我是一名純前端,後端只簡單接觸過 PHP,我並不清楚到底哪些才算是後端那一套。從最開始接觸 Angular 到複雜系統的開發,我只知道裝飾器、依賴注入這些寫法很自然也很靈活,並沒有因為這些概念承受太多的心智負擔。另一方面,現在的招聘 JD 中一般都會加一項: 有後端經驗者優先。可見現在的用人單位更加註重全面的綜合素養,對於沒有後端經驗的前端開發者,使用 Angular 對於橫向技術的擴充更為有利,所以秉承後端那一套絕對不是壞事。如果這個理由不能令各位信服的話,我們可以再來看看如日中天的 TypeScript,它也不過是秉承後端思維的語言。如果有人因為後端思維而不接受 Angular 的話,那麼 TypeScript 也同樣應該被抵制,但事實是接受 TypeScript 的開發者越來越多,比如某某框架底層也改 TS 了。

招聘梗

Angular 招人太難了!

從我做面試官的角度來看,有 Angular 開發經驗的候選人確實很少,如果單純從框架使用的熟練度招人 Angular 確實吃虧。但是面試中涉及具體框架的問題已經越來越少,更多的還是巨集觀的基礎知識,也就是說以同等條件招一個 vue 開發者也是一樣的問題。我上一家公司的某部門就是 vue 技術棧,一個季度也沒招到合適的候選人。

其實招聘難並不代表用人難,我們部門的後端實習生也就兩天時間就能上手 Angular 了,後來我也帶過前端實習生,簡單教了一下,也很快完成了需求。招人的難易程度不在於框架,因為基礎紮實的前端本就難得。

黑盒梗

所有 Webpack 的相關配置都封死了不靈活。

很多人喜歡吐槽 Angular CLI 把 Webpack 配置寫死了,相比其它框架提供 config 目錄來說不靈活。關於 Angular CLI 可以拆分 Webpack 配置項就不說了,現在單純討論這種設計到底有沒有好處。其實這也是一種開閉原則,將複雜常用的功能包裝,然後通過外部引數項進行配置。這種設計方式根本就不新鮮,大部分外掛也都是類似的實現原則。其中比較典型的外掛比如大名鼎鼎的 ag-grid 和 fullcalendar,兩個外掛的功能都很複雜而且都沒有暴露 DOM 結構,都是通過 JSON 資料進行自定義配置,有些功能因為沒有完整的 DOM 結構確實操作起來會有些難受,但是好處就是輕便,使用簡單。

從我這兩年做專案的經歷來看,使用 Angular CLI 的配置完全足夠,並沒有遇到必須獨立配置項的情況。

生態梗

Angular 生態不行,元件庫很少。

Angular 在 v5 之後生態已經逐步完善,元件庫及外掛的數量完全不遜色於其它框架,而質量上更是有過之而無不及。Angular 官方也親自維護了一套 Material 元件庫,質量之高無需多言。Google 內部還有一套 React 編寫的 MDC 元件庫,但是經過對比之後發現質量和 Angular Material 還是差一個檔次。還有一個社群維護的基於 Angular 指令的 Flex Layout 佈局神器,更是強大到沒朋友。之所以強大,是因為它不僅實現了 Flex 佈局,而且整合了 Grid 佈局,這也是我知道的唯一一個 CSS Grid 框架。

總結

除了以上提到的常用黑梗之外,很有很多其它不常見的吐槽觀點。欲加之罪,何患無辭? Angular 還有很多待解決的 issue,所以隨便挑一個 issue 出來都可以吐槽一番。只盯著缺點看的人,滿眼都是缺點。

就在寫這篇文章的時候,又看到了一些觀點清奇的黑梗,開始吐槽 Angular 的 decorator,言外之意應該是 Angular 是裝飾器的重度使用者,而裝飾器還沒有被標準化(這個標準看起來和 TS 的差距越來越大,而且 TS 的裝飾器也只是實驗特性),一旦裝飾器被標準化,看你 Angular 怎麼收場。黑的確實高明,不瞭解的人很容易被嚇住,其實 Angular 的裝飾器和 TS 並沒有直接關係,只是一個語法糖,而且 Angular 也有自己的一套靜態編譯,即使標準的變化再大,Angular 都有足夠的彈性應對,業務側使用 ng update 也可以很容易地進行程式碼替換。

本文並不是想對比框架間的優劣,只是希望 Angular 可以被公正對待。如果不喜歡 Angular,也請不要惡意詆譭。

最近看到有朋友想找 Angular 相關的崗位,列舉一下自己知道的公司及部門,歡迎大家糾正補充[偷笑]

  • 若干外企(絕對香)
  • 阿里雲
  • 華為雲
  • 靈雀雲
  • 海致 BDP
  • Worktile
  • 猿輔導
  • 部落格園
  • 中信銀行軟開(部分系統)
  • 360 大資料中心(部分專案)
  • 馬蜂窩系統部

相關文章