<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gbk

    JBoss Seam--Java最優(yōu)秀的快速開(kāi)發(fā)框架之一

    JBoss Seam,算得上是Java開(kāi)源框架里面最優(yōu)秀的快速開(kāi)發(fā)框架之一

    一、Seam適應(yīng)快速開(kāi)發(fā)、簡(jiǎn)化框架的趨勢(shì)

    在RoR 流行之前,Java社區(qū)的主流還是非常講究分層、架構(gòu)、復(fù)用和模式,而比較忽視快速開(kāi)發(fā)和簡(jiǎn)化架構(gòu)的,其結(jié)果就是代碼量大、開(kāi)發(fā)周期長(zhǎng)、架構(gòu)相當(dāng)煩瑣。以比較常見(jiàn)的Struts/Spring/Hibernate為例,從大的分層來(lái)說(shuō)就有Web層、業(yè)務(wù)層和持久層,從細(xì)的分層就從前到后有:View(JSP) -> Struts Action -> Spring Business Object Bean -> Spring DAO Bean -> Hibernate Persistent Object。如果有Remoting調(diào)用,那么還需要相應(yīng)的Service Facade層。每層都是用不同的技術(shù)框架或者模式、各層之間整合的方式也是五花八門。把整個(gè)項(xiàng)目的架構(gòu)搭建起來(lái),已經(jīng)是非常麻煩的事情了。

    Seam 給我的感覺(jué)像是一個(gè)異常簡(jiǎn)單的MVC框架,他實(shí)際上只有兩層:JSF View和 Seam Component。而Seam Component有兩類:一類是Entity Bean,另一類就是Session Bean。Entity Bean映射數(shù)據(jù)庫(kù)表,Session Bean完成所有的業(yè)務(wù)邏輯,包括可能的持久化,事務(wù),響應(yīng)頁(yè)面請(qǐng)求、商業(yè)邏輯,頁(yè)面流控制等等。配置文件也不多,除了一堆基礎(chǔ)的配置文件,唯一一個(gè)需要不斷修改的就是pages.xml了,即配置JSF的view映射。



    所以Seam開(kāi)發(fā)項(xiàng)目看起來(lái)很簡(jiǎn)單、很直接,無(wú)分層之苦惱。相應(yīng)的也會(huì)讓程序員把精力主要放在業(yè)務(wù)邏輯組件的實(shí)現(xiàn)上,而不是把精力浪費(fèi)在架構(gòu)、分層、模式和基礎(chǔ)設(shè)施搭建的工作上面。

    二、Seam的數(shù)據(jù)綁定做的很出色

    由于是一個(gè)簡(jiǎn)單的兩層結(jié)構(gòu),View和Component之
    間的數(shù)據(jù)綁定做的很出色,看起來(lái)比我欣賞的Webwork的數(shù)據(jù)綁定方式更勝一籌。官 方的說(shuō)法叫做雙向依賴注入,在component里面可以直接取到頁(yè)面提交的數(shù)據(jù),在頁(yè)面也可以直接訪問(wèn)component數(shù)據(jù)。

    另外持久化數(shù)據(jù)的校驗(yàn)也直接集成好了,在EntityBean里面聲明數(shù)據(jù)的約束,在頁(yè)面就可以直接校驗(yàn)了,和RoR的數(shù)據(jù)校驗(yàn)方式是一樣的,當(dāng)然這也得益于Gavin King是Seam和Hibernate兩個(gè)項(xiàng)目的作者的緣故。

    三、Seam的組件機(jī)制看起來(lái)相當(dāng)好用

    既然Seam簡(jiǎn)化了分層,實(shí)際上把主要的工作都推到組件層去完成了。但是Seam的組件層看起來(lái)很簡(jiǎn)單,這得益于Seam的組件機(jī)制設(shè)計(jì)了很多的組件狀態(tài),根據(jù)不同的組件狀態(tài),天然的劃分了不同組件的功能和邏輯。

    Seam 的組件有點(diǎn)類似于把傳統(tǒng)MVC的Action和Spring的Bean合二為一了,但還是不同于傳統(tǒng)的MVC框架下面的Action:傳 統(tǒng)的MVC Action是基于頁(yè)面請(qǐng)求的,無(wú)法復(fù)用,而Seam的組件是事件驅(qū)動(dòng)方式,它只需要捕獲和實(shí)現(xiàn)事件代碼就可以了,至于怎么觸發(fā)它并不需要知道,他和 Web層可以不綁定,因此理論上面來(lái)說(shuō)是可以實(shí)現(xiàn)組件復(fù)用的。我個(gè)人認(rèn)為Seam的這個(gè)組件機(jī)制非常巧妙,既可以用來(lái)實(shí)現(xiàn)響應(yīng)頁(yè)面事件,綁定頁(yè)面數(shù)據(jù)的所謂Web Bean,也可以用來(lái)實(shí)現(xiàn)和Web沒(méi)有任何關(guān)系的純業(yè)務(wù)邏輯組件,一個(gè)很漂亮的實(shí)現(xiàn)。

    另外Seam的組件注入機(jī)制看起來(lái)也很簡(jiǎn)單,不像Spring那樣麻煩,而且內(nèi)置了很多現(xiàn)成的組件進(jìn)來(lái),直接用Annotation聲明一下就可以用了,感覺(jué)寫組件真的很方便、很靈活、很強(qiáng)大。

    四、Seam把數(shù)據(jù)庫(kù)資源的管理和事務(wù)的封裝完全隱藏起來(lái)了

    Spring 的數(shù)據(jù)庫(kù)資源管理和事務(wù)封裝是通過(guò)提供了一系列的代理類以及配置文件來(lái)實(shí)現(xiàn)的,程序員還是要通過(guò)配置文件的方式來(lái)手工管理事務(wù),訪問(wèn)數(shù)據(jù)庫(kù)也必須通過(guò)Template編寫匿名內(nèi)部類來(lái)實(shí)現(xiàn),而且在Spring/Hibernate框架下面,OpenSessionInView是一個(gè)很討厭的問(wèn)題。

    但是Seam已經(jīng)把數(shù)據(jù)庫(kù)資源的管理和事務(wù)的封裝全部都隱藏起來(lái)了,程序員完全不需要知道,也不需要操心這些事情,這真是個(gè)大大的解放。當(dāng)然 Seam可以做到這一點(diǎn),也無(wú)非是因?yàn)镾eam提供了一套上至View層,下至持久層完整的框架,因此可以把實(shí)現(xiàn)細(xì)節(jié)隱藏在框架內(nèi)部,不暴露給程序員。 Spring之所以做不到這一點(diǎn),也因?yàn)樗怀洚?dāng)了一個(gè)黏合劑,不能夠直接修改View層和持久層帶來(lái)的限制。

    五、Seam對(duì)第三方框架的整合看起來(lái)比Spring更深入

    原來(lái)印象當(dāng)中只有Spring才提供了一站式的解決方案,這次一看Seam文檔,呵!發(fā)現(xiàn)Seam也都齊全了,什么郵件啦、工作流啦、頁(yè)面流啦、規(guī)則引擎啦、異步任務(wù)調(diào)度啦、消息系統(tǒng)啦、Web服務(wù)啦、遠(yuǎn)程調(diào)用啦、甚至全文檢索啦全部都集成了。而且集成的比Spring更深入一些,例如Java EE本身的JMS,MDB自然是Seam的強(qiáng)項(xiàng),而JBoss自家的JBPM,JPDL,Rules集成的更加沒(méi)得說(shuō)。


    從整合角度來(lái)說(shuō),感覺(jué)Spring和Seam的出發(fā)點(diǎn)不同:Spring更像一個(gè)平臺(tái),我提供整合的可能性,然后程序員你自家去整合,我提供一些寫好的整合bean,對(duì)于這些你通過(guò)XML配置一下就整合進(jìn)來(lái)了,如果我沒(méi)有提供bean的,那么你也可以自己寫bean來(lái)整合。而Seam更像一個(gè)完整的框架而不是平臺(tái),我這個(gè)框架想提供的功能,框架自身就已經(jīng)整合好了,你直接用就是了,你也可以自己寫擴(kuò)展來(lái)整合,但是這個(gè)不是Seam希望程序員做的事情。

    因此對(duì)于程序員的感覺(jué)來(lái)說(shuō),Spring給你提供了一切的零件和半成品,但你要自己動(dòng)手來(lái)組裝,而Seam已經(jīng)給你裝好了一個(gè)成品,你就別自己改裝了,直接拿去用吧。

    六、Seam提供了方便的代碼生成器

    和appfuse 類似,可以直接用ant task來(lái)生成一個(gè)完整項(xiàng)目的骨架,以及相應(yīng)的組件代碼生成器,利用seam-gen可以快速生成一個(gè)完整的、帶有AJAX功能的CRUD項(xiàng)目,而且還是一個(gè)eclipse或者netbeans工程,你可以直接用IDE打開(kāi)編輯了。這功能雖然不太難做,但是對(duì)于程序員來(lái)說(shuō),幫助是很大的。Seam做的相當(dāng)不錯(cuò)。


    以上是我對(duì)Seam的一點(diǎn)小小的贊許,當(dāng)然我也有一點(diǎn)疑問(wèn):

    一、Seam的View實(shí)現(xiàn)是JSF,看頁(yè)面代碼還是密密麻麻的Tag

    我是非常反感JSP Tag的,看看頁(yè)面密密麻麻的Tag就頭皮發(fā)麻,能不能弄一個(gè)Template呀,例如freemarker啥的?這些Tag既不直觀,也不方便擴(kuò)展。需要擴(kuò)展頁(yè)面組件,總不能讓我自定義Tag去干活吧?不清楚這個(gè)問(wèn)題怎么辦?像freeamarker還可以方便的自定義頁(yè)面宏呢。

    二、每次修改都要重新打包發(fā)布,太麻煩了吧

    就算修改一個(gè)頁(yè)面,也要整個(gè)打包deploy成為一個(gè)ear去拷貝到j(luò)boss的應(yīng)用目錄下面,這個(gè)要是改頁(yè)面,不是得煩死? 我以前都是在項(xiàng)目里面直接內(nèi)嵌Jetty,作為一個(gè)application啟動(dòng),修改頁(yè)面根本無(wú)需重起呀,更不要說(shuō)deploy了。

    總體來(lái)說(shuō),我覺(jué)得Seam框架非常出色,尤其是他的組件機(jī)制設(shè)計(jì)的很有匠心,真不愧是Gavin King精心打造的框架了,雖然看起來(lái)還是有些缺陷,但是做企業(yè)應(yīng)用項(xiàng)目的話,Seam是一個(gè)很棒的選擇,作為程序員來(lái)說(shuō),要比用 Spring/Hibernate/Struts省心的多,更能夠把精力放在業(yè)務(wù)邏輯的編寫上面,開(kāi)發(fā)效率也很不錯(cuò),可能是Java開(kāi)源框架里面最優(yōu)秀的快速開(kāi)發(fā)框架之一了

    posted on 2008-10-07 16:38 百科 閱讀(285) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 四虎精品亚洲一区二区三区| 亚洲国产精品lv| 97久久国产亚洲精品超碰热| 久久久久久一品道精品免费看| 亚洲国产黄在线观看| 色妞www精品视频免费看| 亚洲区不卡顿区在线观看| 五月天婷婷免费视频| 中国亚洲女人69内射少妇| 国产.亚洲.欧洲在线| 欧美在线看片A免费观看| 亚洲熟妇无码八V在线播放| 日韩午夜免费视频| 人成免费在线视频| 日本亚洲成高清一区二区三区| 免费在线看黄的网站| 久久久久亚洲AV无码麻豆| 中国在线观看免费高清完整版 | 亚洲综合婷婷久久| 亚洲无砖砖区免费| 亚洲一本一道一区二区三区| 色吊丝永久在线观看最新免费| 免费的黄色网页在线免费观看| 亚洲精品无码av人在线观看| 最近最新高清免费中文字幕 | 国产永久免费高清在线| 亚洲麻豆精品果冻传媒| 女人被免费视频网站| 久久久久亚洲AV片无码| 一二三四视频在线观看中文版免费| 亚洲乱码无人区卡1卡2卡3| 亚洲国产精品嫩草影院久久 | 国产一区二区三区免费| 亚洲一区免费视频| 亚洲不卡无码av中文字幕| 久久久久久国产精品免费免费男同 | 九九免费精品视频在这里| 亚洲视频在线一区二区三区| 国产免费看插插插视频| 亚洲成av人无码亚洲成av人| 亚洲精品乱码久久久久久久久久久久|