隨筆-75  評(píng)論-193  文章-5  trackbacks-0

              由于前段時(shí)間使用JSF做了一個(gè)項(xiàng)目,不少使用JSF的兄弟們對(duì)JSF評(píng)價(jià)并不好,因此在學(xué)習(xí)的過(guò)程中一直在想,JSF究竟是不是應(yīng)該繼續(xù)學(xué)習(xí)繼續(xù)研究使用下去,在看完Seam In Action的第三章后,這個(gè)星期又對(duì)Struts2簡(jiǎn)單學(xué)習(xí)了一下,終于決定結(jié)束JSF和JBoss Seam的學(xué)習(xí)了。

              因?yàn)閺腏SF的學(xué)習(xí)和Struts2的學(xué)習(xí)對(duì)比中明顯覺(jué)得JSF復(fù)雜,對(duì)于一個(gè)技術(shù)力量不是非常強(qiáng)的項(xiàng)目組來(lái)說(shuō),使用JSF當(dāng)你遇到一些問(wèn)題時(shí),絕對(duì)是一件痛苦的事情。

              從自己的實(shí)踐中覺(jué)得JSF至少有兩個(gè)致命傷:

              1、覺(jué)得JSF貌似把簡(jiǎn)單的事情搞得復(fù)雜化了,在傳統(tǒng)的MVC框架如Struts中,從request中獲取param很容易,也可以將param封裝為對(duì)象,在JSF中,希望將這一切都模型化,一切都以組件為中心,類(lèi)似于Swing的架構(gòu),但是http的無(wú)狀態(tài)以及web的本質(zhì),使得一般JSF只能將組件樹(shù)存放在服務(wù)端,同時(shí)又不能象CS程序那樣方便的查看組件的狀態(tài)、屬性等信息。對(duì)于通常情況來(lái)說(shuō),JSF將其封裝的很好,不用我們開(kāi)發(fā)者操心,但是當(dāng)遇到一些問(wèn)題時(shí),對(duì)于開(kāi)發(fā)者想去調(diào)試查看問(wèn)題時(shí),問(wèn)題就顯得很復(fù)雜了。

              2、JSF的自定義組件感覺(jué)超復(fù)雜,難度應(yīng)該比當(dāng)年自定義JSP標(biāo)簽更要高,試想一下,如果哪個(gè)組件不合意了,想改一下,還是比較困難的,除非對(duì)JSF組件有相當(dāng)?shù)纳钊肓私狻?/p>

              順便把項(xiàng)目中遇到的一個(gè)RichFaces的缺點(diǎn)列出來(lái):

              RichFaces在生成組件的html時(shí),大量使用了Div,曾經(jīng)有過(guò)一個(gè)頁(yè)面有1千多行(在一個(gè)table中),頁(yè)面上還有一個(gè)RichFaces的下拉菜單,從而導(dǎo)致菜單響應(yīng)非常之慢,后來(lái)只有將rich:datatable換為普通的html:table,就沒(méi)有問(wèn)題了。

              再看看Seam In Action中總結(jié)的JSF的缺點(diǎn):

              1、在JSF中初次請(qǐng)求的處理流程太過(guò)簡(jiǎn)單,而后續(xù)請(qǐng)求則執(zhí)行了完整的復(fù)雜的處理流程。在JSF中假設(shè)第一個(gè)調(diào)用應(yīng)該是在頁(yè)面被渲染后執(zhí)行,但實(shí)際中有時(shí)我們需要在第一次請(qǐng)求時(shí)就執(zhí)行某些操作。在JSF中缺少象Struts中的Controller。

              2、所有的請(qǐng)求都是POST。瀏覽器處理POST請(qǐng)求是比較草率,當(dāng)用戶執(zhí)行了一個(gè)JSF Action操作后,點(diǎn)擊瀏覽器的刷新按鈕時(shí),瀏覽器會(huì)詢問(wèn)用戶是否重新提交,這會(huì)令用戶非常困惑。

              3、僅僅擁有簡(jiǎn)單基礎(chǔ)的頁(yè)面導(dǎo)向機(jī)制。

              4、過(guò)度復(fù)雜的生命周期。

              JBossSeam宣稱(chēng)對(duì)于JSF存在的缺點(diǎn)都提供了解決方法,但是有一種更復(fù)雜的感覺(jué)。

              在Seam中,生成選擇的項(xiàng)目時(shí),有EAR和WAR的選項(xiàng),如果選擇了EAR選項(xiàng),那么Seam會(huì)生成四個(gè)項(xiàng)目,分別為war、ear、ejb、test四個(gè)類(lèi)型的項(xiàng)目。有一次我將生成的項(xiàng)目從一個(gè)目錄拷貝到另一個(gè)目錄,切換了Eclipse的workspace,此時(shí)問(wèn)題來(lái)了,ejb項(xiàng)目提示編譯錯(cuò)誤,提示無(wú)法找到某些class,找來(lái)找去找來(lái)找去......后來(lái)將項(xiàng)目關(guān)閉了一下,再打開(kāi)錯(cuò)誤提示就沒(méi)有了。

              由這個(gè)問(wèn)題我忽然想到,使用Seam集成JSF、EJB是不是太重量級(jí)了,如果采用EJB作為替代普通的POJO,對(duì)于一個(gè)小型的項(xiàng)目組來(lái)說(shuō),一般的規(guī)模就是三至五個(gè)人(我個(gè)人的理解),開(kāi)發(fā)人員本來(lái)就不多,還要面對(duì)Seam劃分的四個(gè)項(xiàng)目,好像比較繁瑣,當(dāng)然采用war模式另當(dāng)別論。

              相比較而言,這個(gè)星期看了一些Struts2的資料,覺(jué)得Struts2的架構(gòu)非常清晰,易于理解。

              翻了很早之前的JavaEye上的一個(gè)帖子,提到JSF是面向開(kāi)發(fā)工具的,如果能做到象VB那樣,就大有前途了,4年過(guò)去了,不要提JSF的開(kāi)發(fā)工具了,就是Java各個(gè)方面的GUI開(kāi)發(fā)工具,又有哪個(gè)能和VB相比呢,看來(lái)選擇JSF作為一個(gè)方向不是一個(gè)好選擇........還是及早放棄吧,哎...


              最后我覺(jué)得可以用這么一句話可以形容JSF,看起來(lái)很美,用起來(lái)不爽。

          posted on 2008-12-25 23:35 The Matrix 閱讀(2341) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): JBoss Seam/JSF

          評(píng)論:
          # re: JBossSeam學(xué)習(xí)系列之五--完結(jié)篇 2008-12-26 10:57 | fool
          jsf高效省事 僅僅值綁定這一條就比struts2,struts強(qiáng)得太多
          當(dāng)然學(xué)習(xí)曲線的確比較陡 另外各開(kāi)源的jsf實(shí)現(xiàn)并不按sun RI參考實(shí)現(xiàn)的方式做組件,自定義組件確實(shí)難度大了點(diǎn),學(xué)習(xí)諸如ADF之類(lèi)就更麻煩了
          不過(guò)我還是喜歡jsf,很好  回復(fù)  更多評(píng)論
            
          # re: JBossSeam學(xué)習(xí)系列之五--完結(jié)篇 2008-12-26 12:05 | The Matrix
          @fool
          確實(shí)JSF的值綁定比較好用,但Struts2中的值綁定我簡(jiǎn)單看了一下,發(fā)覺(jué)也沒(méi)有比JSF差太多,能否明確指明JSF的值綁定強(qiáng)在哪里,呵呵  回復(fù)  更多評(píng)論
            
          # re: JBossSeam學(xué)習(xí)系列之五--完結(jié)篇 2008-12-26 22:24 | Lf0x
          沒(méi)有什么技術(shù)是完美的,敢問(wèn)Struts 2 能勝任所有的項(xiàng)目嗎? 才看了一周就能完全對(duì)另外一種技術(shù)做這樣的否定未免也太絕對(duì)了吧? 雖然還沒(méi)接觸 Struts 2 ,但是個(gè)人覺(jué)得 JSF 不差,況且企業(yè)級(jí)的開(kāi)發(fā)并不是就局限在 Web 這個(gè)范圍呢的,JSF 有其自己的生存空間  回復(fù)  更多評(píng)論
            
          # re: JBossSeam學(xué)習(xí)系列之五--完結(jié)篇 2008-12-27 14:48 | yuanyc
          兄弟,服務(wù)器端組件模型有其優(yōu)點(diǎn)..jsf 確實(shí)是過(guò)于復(fù)雜
          建議你看看wicket..既實(shí)現(xiàn)了服務(wù)器端組件模型的優(yōu)點(diǎn),又比較簡(jiǎn)單..
          沒(méi)有xml 配置文件, 沒(méi)有標(biāo)簽庫(kù),只要html 模板和java代碼即可..  回復(fù)  更多評(píng)論
            
          # re: JBossSeam學(xué)習(xí)系列之五--完結(jié)篇 2008-12-27 16:16 | The Matrix
          @Lf0x
               說(shuō)的不錯(cuò),沒(méi)有什么技術(shù)是完美的,Struts2不能勝任所有的項(xiàng)目,JSF也不能勝任所有的項(xiàng)目,任何東西都是相對(duì)的,沒(méi)有絕對(duì)合適的事情。
               JSF我并不是看了才一周,我們用它做了一個(gè)開(kāi)發(fā)框架,包含了基本的權(quán)限管理及相應(yīng)的用戶管理等基本功能,然后有三個(gè)項(xiàng)目使用了這個(gè)開(kāi)發(fā)框架(我負(fù)責(zé)了其中的一個(gè)項(xiàng)目)。但是相關(guān)項(xiàng)目組的兄弟們對(duì)JSF反響并不是很好。
               本來(lái)我打算沿著JSF這條路繼續(xù)走下去,所以打算繼續(xù)研究JSF和其相關(guān)的技術(shù),對(duì)這個(gè)開(kāi)發(fā)框架繼續(xù)改進(jìn),但是研究了一段時(shí)間后,又看了Flex、Struts2后,覺(jué)得JSF確實(shí)比較復(fù)雜。而從web技術(shù)的發(fā)展方向來(lái)看,RIA肯定是重點(diǎn)。所以才對(duì)JSF有了動(dòng)搖。
               因?yàn)槲矣X(jué)得JSF既然不是以后web技術(shù)演進(jìn)的重點(diǎn)方向,又不是很好用,那么何必還讓好多人在它上面花費(fèi)時(shí)間呢。
               感謝yuanyc的建議,我有空再看看Wicket。
               以后可以做這個(gè)試驗(yàn),用JSF、Struts2、Wicket對(duì)實(shí)現(xiàn)常用的功能進(jìn)行一下比較,看看哪個(gè)最合適,呵呵。
            回復(fù)  更多評(píng)論
            
          # re: JBossSeam學(xué)習(xí)系列之五--完結(jié)篇 2009-01-06 17:28 | 範(fàn)
          剛剛完成一個(gè)項(xiàng)目,客戶端是Applet開(kāi)發(fā)的,服務(wù)端 WEB-ESB-EJB,其中ESB做到了對(duì)EJB->EJB,SOAP->EJB,SOAP->SOAP,和EJB->SOAP的調(diào)用,其中EJB包括本地和遠(yuǎn)程兩種情況。

          就客戶端開(kāi)發(fā)技術(shù),我覺(jué)得有實(shí)力的公司還是采用Applet。首先表現(xiàn)力很豐富,使用了簽名后就相當(dāng)于本地應(yīng)用程序,功能極為強(qiáng)大;其次本來(lái)就有豐富的swing控件,當(dāng)然本地?cái)?shù)據(jù)集控件支持SOAP需要新開(kāi)發(fā)(本人開(kāi)發(fā)的,哈哈)。這樣客戶端開(kāi)發(fā)人員其實(shí)就是做SWING的客戶端開(kāi)發(fā),效率不是蓋得。

          前后臺(tái)使用SOAP交互,擴(kuò)展很方便。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 砀山县| 铜陵市| 东方市| 塘沽区| 乌兰浩特市| 泗洪县| 酒泉市| 西丰县| 双柏县| 甘南县| 武隆县| 吉林省| 永春县| 吉木乃县| 双柏县| 托里县| 库尔勒市| 永年县| 鄂托克旗| 南安市| 四子王旗| 桑日县| 隆昌县| 大余县| 海安县| 涞水县| 临武县| 安乡县| 嘉兴市| 平利县| 广德县| 黎平县| 综艺| 汝阳县| 社会| 漯河市| 仁怀市| 磐石市| 丰县| 广宁县| 乐山市|