作者用過 Woodstock(JSF 組件庫)感覺尚可,但組件控制不佳,未用於畢業設計。基於實戰提出 JSF 兩大核心質疑,僅為拋磚引玉。
1. 有狀態編程模型:Web 本質是無狀態的
JSF 將 Web 編程強行拉向 Java SE GUI 模型:維護組件樹、組件狀態。這非常不自然、四不像。Web 開發基於 request/session/application 範圍,本質無狀態。JSF 僅維護視圖狀態而非數據狀態,編程模型混亂。Web 就是 Web!
2. 面向組件開發、更 OO?優勢未必抵消麻煩
- 承認 JSF 確實將 Web 編程變為 Java SE GUI 編程,是面向組件的。
- 但實際使用中,組件控制能力變得模糊、不靈活,需在 Backing Bean 中操控組件,感覺「太作做」。
- 對比 PHP、Rails、JSP(JSTL) 無刻意組件模型,直接操作 HTML 控件更簡單直接。
- 面向組件帶來的好處遠不能抵消其麻煩。
3. 表現層 OO 論調是誤區
- Widget 類 Ajax HTML 組件化可理解,但 PHP/Rails 無組件同樣好用。
- 表現層只需頁面片段重用與插入即夠,MVC 做到位即可。
- OO 在服務端業務邏輯層價值巨大,但 Web 是瘦客戶端(非 Swing),表現層大張旗鼓搞 JSF 式 OO 是誤區。
- JSF 將 HTML 與後端綁死、模仿 Swing、強行 OO,屬於費力不討好。