隨筆-314  評(píng)論-209  文章-0  trackbacks-0

          摘要:

          本文根據(jù)BJUG maillist討論整理,取自Buffalo網(wǎng)站,在此對(duì)Michael的貢獻(xiàn)表示感謝!文中引用的評(píng)論僅表示個(gè)人觀點(diǎn),供大家作為技術(shù)參考。先敬佩Michael一個(gè),能做到這樣,Michael付出了很多。下文簡(jiǎn)單比較一下Buffalo和DWR,兩者的思路基本類(lèi)似,有很多共性的東西。總的看來(lái),Buffalo能滿(mǎn)足基本的需要,但DWR已經(jīng)在整體系統(tǒng)結(jié)構(gòu)上有了更多優(yōu)勢(shì)...
          Buffalo VS DWR

          作者:cleverpig

          聲明:文中引用的評(píng)論僅表示個(gè)人觀點(diǎn),供大家作為技術(shù)參考。


          開(kāi)篇言:

          ????本文根據(jù)BJUG maillist討論整理,取自Buffalo網(wǎng)站,在此對(duì)Michael的貢獻(xiàn)表示感謝!文中引用的評(píng)論僅表示個(gè)人觀點(diǎn),供大家作為技術(shù)參考。先敬佩Michael一個(gè),能做到這樣,Michael付出了很多。下文簡(jiǎn)單比較一下Buffalo和DWR,兩者的思路基本類(lèi)似,有很多共性的東西。總的看來(lái),Buffalo能滿(mǎn)足基本的需要,但DWR已經(jīng)在整體系統(tǒng)結(jié)構(gòu)上有了更多優(yōu)勢(shì)。框架的生命周期是有限的,如果不能與時(shí)俱進(jìn),將遲早面臨被淘汰的局面。

          版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必保留以下作者信息和鏈接
          作者:cleverpig;cleverpig
          原文:http://www.matrix.org.cn/resource/article/2006-10-18/Buffalo+DWR_4ebd1e01-5e90-11db-a5c2-7f23a8944cb0.html
          關(guān)鍵字:buffalo,dwr,ajax,比較

          一、兩個(gè)Ajax框架:

          image

          ????Buffalo是一個(gè)為java web項(xiàng)目而設(shè)計(jì)的輕量級(jí)AJAX框架。它是開(kāi)源的(Apache License 2.0),其功能強(qiáng)大且易用。主要解決在j2ee ajax開(kāi)發(fā)中的常見(jiàn)問(wèn)題。它承諾為開(kāi)發(fā)者和最終用戶(hù)都能受益。最重要的Buffalo的作者M(jìn)ichael Chen是位中國(guó)開(kāi)發(fā)者,他就生活在北京。

          image

          ????DWR是一個(gè)Java開(kāi)源庫(kù),幫助你實(shí)現(xiàn)Ajax網(wǎng)站。它可以讓你在瀏覽器中的Javascript代碼調(diào)用Web服務(wù)器上的Java,就像在Java代碼就在瀏覽器中一樣。DWR會(huì)根據(jù)你的Java類(lèi)動(dòng)態(tài)的生成Javascript代碼。這些代碼的魔力是讓你感覺(jué)整個(gè)Ajax調(diào)用都是在瀏覽器上發(fā)生的,但事實(shí)上是服務(wù)器執(zhí)行了這些代碼,DWR負(fù)責(zé)數(shù)據(jù)的傳遞和轉(zhuǎn)換。

          二、共性:

          ????支持Spring集成:均支持。

          ????使用一個(gè)Servlet來(lái)接收所有的AJAX請(qǐng)求:
          ????????Buffalo使用ApplicationServlet<————>DWR使用DWRServlet。

          ????使用XMLHttpRequest + JavaScript 傳輸數(shù)據(jù):
          ????????Buffalo使用buffalo.js<————>DWR使用dwr.js & util.js。

          ????在Java和Javascript之間轉(zhuǎn)換數(shù)據(jù):
          ????????Buffalo使用marshallingContext<————>DWR使用Converter。

          ????協(xié)議:
          ????????Buffalo在1.2.x之前采用burlap, Buffalo解析大數(shù)據(jù)量可能會(huì)比較慢,然而可以適用于多種服務(wù)器端和客戶(hù)端,并且burlap協(xié)議的完整性和支持的數(shù)據(jù)類(lèi)型更加豐富。2.0開(kāi)始采用自定義的基于xml的協(xié)議(來(lái)自burlap,做了更適合web的修改),并自行編寫(xiě)了解析器,性能更高。

          ????????DWR使用自定義的簡(jiǎn)單文本協(xié)議。


          三、Buffalo特性:

          ?? 1. 基于prototype:如果你的AJAX應(yīng)用也是基于prototype,那么可以減少重復(fù)加載prototype的帶寬,并且獲得相當(dāng)一致的編程概念。

          ?? 2. Bind:提供了對(duì)結(jié)果數(shù)據(jù)的處理,直接將數(shù)據(jù)綁定到頁(yè)面對(duì)象并展示,這是一個(gè)動(dòng)人的特性。(DWR在Util.js中也提供了一些方法來(lái)簡(jiǎn)化數(shù)據(jù)的展示,但不如 Buffalo做的更多。) 在2.0中,Bind能力更加強(qiáng)大,能夠?qū)⒅抵苯咏壎ǖ奖韱卧亍⒈砀瘛IV/Span、甚至整個(gè)表單上。關(guān)鍵是這種綁定是無(wú)侵入并且與buffalo 整體結(jié)構(gòu)完全整合,對(duì)外表現(xiàn)只有一個(gè)簡(jiǎn)單的buffalo.bindReply或者Buffalo.Bind.bind即可。http://buffalo.sourceforge.net/binding.html有一些描述。

          ?? 3. 序列化:Buffalo支持任意對(duì)象,任意深度,任意數(shù)據(jù)結(jié)構(gòu)的java到j(luò)avascript以及javascript到j(luò)ava的雙向序列化。并且支持引用。這里有完整的協(xié)議說(shuō)明。由于文檔和演示不充分,很多人以為buffalo不支持任意對(duì)象了 ~

          ?? 4. 生命周期對(duì)象訪問(wèn):1.2.4之前需要繼承一個(gè)BuffaloService,
          ????從1.2.4開(kāi)始就不需要繼承了,引入了線程安全的BuffaloContext對(duì)象,只需要通過(guò)BuffaloContext.getContext()即可獲得一個(gè)線程安全的引用,并且對(duì)Request的各種屬性進(jìn)行操作。更方便的是:

          ??????Map BuffaloContext.getContext.getSession()
          ??????Map BuffaloContext.getContext.getApplication()
          ??????Map BuffaloContext.getContext.getCookie()

          ??????即可獲得session/application/cookie的Map,操作這些Map即可獲得對(duì)這些生命周期的各種變量進(jìn)行查詢(xún)和更新。這個(gè)特性參考了webwork中ActionContext的設(shè)計(jì)。

          ?? 5. 對(duì)Collection/Array的模糊處理:buffalo中提供了對(duì)Collection/Array對(duì)象的模糊識(shí)別能力。例如:服務(wù)器端有一個(gè)方法需要List參數(shù),客戶(hù)端傳遞過(guò)去一個(gè)javascript數(shù)組就可以了,不需要費(fèi)心的組裝對(duì)象。buffalo通過(guò)這些很細(xì)小的地方來(lái)提高程序員生產(chǎn)力。

          ?? 6. 客戶(hù)端組裝對(duì)象:據(jù)報(bào)告DWR只支持簡(jiǎn)單數(shù)據(jù)類(lèi)型作為參數(shù)在客戶(hù)端傳入。buffalo支持在客戶(hù)端組裝對(duì)象,甚至可以直接將整個(gè)表單序列化為一個(gè)對(duì)象作為參數(shù)傳給遠(yuǎn)程客戶(hù)端。DWR協(xié)議天生不足,這方面,我猜想它完全沒(méi)有能力。

          ?? 7. 對(duì)重載方法的處理能力:由于java與javascript之間類(lèi)型的不匹配,DWR的代碼生成無(wú)法對(duì)重載方法進(jìn)行處理。例如,sum(double,double), sum(int, int) DWR很可能不知道你要調(diào)用哪一個(gè)。從2.0開(kāi)始buffalo支持了對(duì)重載的處理。

          四、DWR特性:

          ?? 1. 支持Batch:可以將多個(gè)Service函數(shù)調(diào)用放在一個(gè)XMLHttpRequest請(qǐng)求中完成。

          ?? Michael Chen評(píng)論:我一直認(rèn)為這不是一個(gè)好的實(shí)踐。在客戶(hù)端發(fā)起多個(gè)請(qǐng)求并獲得響應(yīng)除了獲得編程的復(fù)雜外,還增加了服務(wù)器端設(shè)計(jì)service的自由度。這種方式感覺(jué)上更鼓勵(lì)為遠(yuǎn)程調(diào)用設(shè)計(jì)細(xì)粒度的服務(wù)、將組裝邏輯放在客戶(hù)端。這種設(shè)計(jì)風(fēng)格我不太喜歡,因此batch也一直沒(méi)有考慮實(shí)現(xiàn),雖然實(shí)現(xiàn)不太麻煩。

          ?? 2. Converter:可以轉(zhuǎn)換任意類(lèi)型的Java對(duì)象到JavaScript,并允許直接使用。例如:Customer類(lèi)包含一個(gè)address變量,當(dāng)AjaxCall返回Customer對(duì)象的時(shí)候,可以直接在Javascript中使用customer.address來(lái)獲得Address的信息。

          ?? 3. HttpServlet:支持在被調(diào)用的Service方法中獲得HttpServletRequest和HttpServletResponse對(duì)象,這樣可以訪問(wèn)當(dāng)前Session中的數(shù)據(jù)。

          ?? 4. 允許Expose部分函數(shù)和屬性。(Buffalo無(wú)限制,可以訪問(wèn)Service中的任意函數(shù)。)

          ?? Michael Chen評(píng)論: 這個(gè)我也考慮過(guò)...DWR的代碼生成機(jī)制使得它不得不通過(guò)這種方式減小些流量。Buffalo如果想實(shí)現(xiàn)這個(gè)特性也不是不行,只是我覺(jué)得,既然 Service辛辛苦苦實(shí)現(xiàn)了,還需要通過(guò)這種方式來(lái)讓別人不能用么?況且buffalo沒(méi)有代碼生成,無(wú)論你暴露多少方法流量都是一樣的。考慮到實(shí)際情況,buffalo沒(méi)有實(shí)現(xiàn)這個(gè)特性。

          ?? 5. DWR2.0中提出了Reverse Ajax:提供在Java代碼中來(lái)處理頁(yè)面上元素的功能。

          ?? Michael Chen評(píng)論: 這個(gè)東東...也還是代碼生成的trick...然而我的態(tài)度是javascript與java同樣重要的,因此不會(huì)讓代碼生成類(lèi)的東西破壞javascript的整體性。


          五、相關(guān)資源:

          image

          ?? 在過(guò)去的兩年間,baffalo的開(kāi)發(fā)者擁有值得興奮的積極反饋:buffalo非常適于在java web項(xiàng)目的ajax開(kāi)發(fā)。為了幫助更多的用戶(hù)更好地使用buffalo,他們期待你的幫助:發(fā)布文檔、bug報(bào)告和bug修正等。

          ?? baffalo Maillist: buffalo-users@lists.sourceforge.net

          ?? baffalo 論壇:http://groups.google.com/group/amowa

          image
          cleverpig寫(xiě)的Buffalo的最佳實(shí)踐
          posted on 2006-10-19 15:31 xzc 閱讀(422) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): XML
          主站蜘蛛池模板: 镇坪县| 栖霞市| 开原市| 江川县| 青海省| 蓬溪县| 万全县| 自治县| 江源县| 贵定县| 锡林郭勒盟| 锦屏县| 苗栗市| 安阳县| 威远县| 老河口市| 舞钢市| 丰原市| 台中县| 清原| 札达县| 玛纳斯县| 乌拉特中旗| 永靖县| 墨竹工卡县| 辽宁省| 克拉玛依市| 咸阳市| 化州市| 巴塘县| 鹤壁市| 于田县| 樟树市| 洱源县| 敖汉旗| 望城县| 沅江市| 班玛县| 宁德市| 义马市| 小金县|