對(duì)于JSF的一些思考
用過(guò)一段時(shí)間的Woodstock,當(dāng)時(shí)感覺(jué)有點(diǎn)爽,但后來(lái)對(duì)于組件的控制方面的不是很好,沒(méi)有在畢業(yè)設(shè)計(jì)上使用. 對(duì)于JSF想到了一些缺點(diǎn),在這里分析一下。只是淺薄見(jiàn)解
1.有狀態(tài)編程模型
JSF把Web編程搞的非常像JAVA SE GUI編程模型。維護(hù)組件樹(shù)、組件狀態(tài)。這讓我感覺(jué)非常不舒服。Web開(kāi)發(fā)就是Web開(kāi)發(fā),本身就是無(wú)狀態(tài)的。所有行為都是基于 request,session,application等范圍。JSF硬要往GUI模型上套,結(jié)果就是非常不自然,有點(diǎn)四不像了。而且JSF維持的僅僅是視圖狀態(tài),而不是數(shù)據(jù)狀態(tài),這種編程模型有點(diǎn)混亂。我認(rèn)為Web就是Web!
2。面向組件開(kāi)發(fā),更加OO
這是在討論去里看到有人這樣為JSF宣傳。我承認(rèn)這句話的陳述是正確的。因?yàn)镴SF把Web編程基本上變成了JAVA SE的GUI編程。確實(shí)是面向組件的。但是通過(guò)使用,我覺(jué)得這種做法的優(yōu)勢(shì)是否真的有那么大,值得考慮。相比JSF,PHP、Rails、 JSP(JSTL)都沒(méi)有刻意提供所謂的組件。這種做法方便了操縱HTML控件,直接、簡(jiǎn)單。而使用JSF控件時(shí),則對(duì)于他的控制能力變得比較模糊并且不夠靈活。我們需要在Backingbean里對(duì)組件進(jìn)行控制。我感覺(jué)--太作做了。而且這種面向組件的方式所代來(lái)的好處遠(yuǎn)不能抵消它所代來(lái)的麻煩。
至于所謂的OO論,表示層的東西有必要刻意強(qiáng)調(diào)像JSF這種面向組件,OO嗎?對(duì)于Widget那種ajax的HTML面向組件我是可以理解的。 PHP/RoR沒(méi)有面向組件但也非常好用。表示層只需要提供一些頁(yè)面的重用和插入功能就足以了。這讓我想起了人們對(duì)JAVA EE過(guò)度分層的抱怨。于Rails形成了鮮明的對(duì)比。所謂的OO在服務(wù)器端、業(yè)務(wù)處理的代碼中有很大用處。但是Web是瘦客戶端(不像Swing)!在 Web的表示層中如此大張旗鼓的宣揚(yáng)JSF式的OO我認(rèn)為是一種誤區(qū)。我們可以看看PHP\Rails這些語(yǔ)言框架,做到MVC,足夠了。Web的表示層需要的最重要的特性就是容易使用、容易控制、容易重用(也面片段)。
JSF那種把HTML和后端弄到一起,模仿Swing,搞OO的做法有點(diǎn)費(fèi)力不討好的感覺(jué)。
【編輯推薦】