基于Ajax的Web系統(tǒng)開發(fā)的思考

          基于Ajax進行Web系統(tǒng)的開發(fā)無疑是現(xiàn)在最大的熱點,但畢竟web系統(tǒng)開發(fā)這個前提是一樣的,所以在基于ajax開發(fā)的時候同樣是request/response模式,只是這個過程是異步的,那來看看基于ajax開發(fā)和傳統(tǒng)web開發(fā)有什么不同的地方,首先可以看一個典型的ajax的交互場景:
          基于ajax的典型開發(fā)場景.jpg
          1、web頁面的響應交由對應的js事件進行處理,通常來說這個js需要對web頁面的請求進行分析,提取必要的參數(shù),組成調(diào)用service facade所需的格式。
          2、js通過dwr、buffalo這些web remoting框架調(diào)用后臺的service。
          3、Service Facade根據(jù)請求進行分發(fā)至相應的service進行處理。
          4、在service處理完畢后將結(jié)果返回至js,這時會有兩種做法,一種是將html在service facade部分進行組裝,將此html返回給js,由js直接負責顯示;另一種做法是返回數(shù)據(jù)給js,由js負責將數(shù)據(jù)進行渲染顯示。

          在上面的這個交互過程中,對比MVCFramework(webwork、struts)這些會發(fā)現(xiàn)基于ajax的交互過程中的一些不足點:
          1、web頁面對提交至的js要明確。
          2、js需要對請求的參數(shù)進行解析形成service facade所需的參數(shù)。
          3、html在service facade部分進行組裝是否合適?另外一個解決方法則導致需要在js中負責html元素的創(chuàng)建。

          先將這三個不足點放在一邊,這個時候我們來看看基于傳統(tǒng)的MVCFramework的一個典型的交互場景:
          基于MVCFramework的典型開發(fā)場景.jpg
          1、Web頁面的響應交由統(tǒng)一的servlet進行處理。
          2、Servlet將請求的參數(shù)進行處理,調(diào)用相應的ActionFramework由其進行具體的事件處理。
          3、ActionFramework調(diào)用相應的action進行處理。
          4、Action處理完畢后返回result至actionFramework,這時ActionFramework調(diào)用相應的resultResolver,結(jié)合相應的顯示頁面將顯示的html放入response中。
          這是一個比較典型的基于MVCFramework的交互過程,在這個過程中我們得到的幾點好處是:
          1、MVCFramework會根據(jù)配置將請求分發(fā)至對應的action。
          2、MVCFramework會根據(jù)action所需的參數(shù)從request中提取并注入進去,不需要自己從request中去解析。
          3、MVCFramework會根據(jù)action的執(zhí)行結(jié)果結(jié)合相應的頁面進行解析生成html。

          現(xiàn)在我們再來看基于ajax開發(fā)的三個不足點,發(fā)現(xiàn)目前的MVCFramework對其無疑是個解決方案,只是如何將現(xiàn)在的MVCFramework的思想與基于ajax的開發(fā)進行結(jié)合,這里我們首先看基于MVCFramework交互過程和基于ajax交互過程,會發(fā)現(xiàn)這個過程是如此的類似,js可以看成是servlet的替代,相當于給個簡單的理解就是基于servlet的是一種同步的request/response,而基于js的是一種異步的request/response,這個時候其實基于ajax的開發(fā)也就同樣的轉(zhuǎn)入了傳統(tǒng)的基于MVCFramework的一個開發(fā)形式,這里面疑問的問題是在服務器端生成html的問題,我倒覺得這個不是問題,象利用velocity等仍然可保證view的純潔性,返回html至js由js負責重寫的方式我覺得比返回數(shù)據(jù)由js渲染的方式來得好,畢竟在模板文件上寫是一件多么容易的事,和UI可以很簡單的結(jié)合,在經(jīng)過這樣的分析后提出一個這樣的基于ajax的交互過程:
          基于ajax的改進開發(fā)場景.jpg
          目前的ajax的os的東西好像還不能達到這樣的場景吧,那么其實我們需要做的是對webwork稍做改變,讓其只是接受request,然后的流程和目前webwork中的完全相同,將request封裝為xwork需要的,由xwork負責將其相應的注入到對應的action,action處理完畢后返回結(jié)果,由ResultResovler解析為html返回,此時前端的js則將此html進行顯示即可完成整個的交互過程,^_^,maybe下個版本的struts TI會很好的支持這種方式。
          在這樣的一種情況下,我們會發(fā)現(xiàn)基于ajax的開發(fā)對現(xiàn)有的MVCFramework其實不會造成太大的影響,相當于只是加了一種異步的處理模式,可以想像很快MVCFramework都能夠支持同步/異步的處理模式,而且對于開發(fā)人員來說是透明的。

          posted on 2006-01-08 10:04 BlueDavy 閱讀(4298) 評論(4)  編輯  收藏 所屬分類: Java

          評論

          # re: 基于Ajax的Web系統(tǒng)開發(fā)的思考 2006-01-08 19:47 robbin

          這種方式叫做AHAH,是AJAX的一個子集,webwork2.2的AJAX Tag使用的就是這種方式,這種方式和AJAX Remoting是互補的關(guān)系,在一個實際項目中可以根據(jù)具體情況進行組合使用。  回復  更多評論   

          # re: 基于Ajax的Web系統(tǒng)開發(fā)的思考 2006-01-08 20:51 Programmer's Life

          恩,多謝robbin提的這個,去查了一下AHAH,誰如果感興趣的話可以看看這個url:
          http://microformats.org/wiki/rest/ahah
          呵呵,還是更喜歡這種方式,對習慣用MVCFramework的人來說這種方式更容易接受,不過現(xiàn)在webwork的支持不是非常理想,maybe它的下個版本會支持的很好,^_^,不過現(xiàn)在項目是等不及了,決定自己先改....  回復  更多評論   

          # re: 基于Ajax的Web系統(tǒng)開發(fā)的思考 2006-01-10 16:51 toafu

          你好。我覺得你這篇文章的分析過于牽強,尤其是你認為的ajax的不足之處。
          Ajax應用是在客戶端增加了類似控制器的一層,即將原來服務器端的控制器的部分職責轉(zhuǎn)移到了客戶端,充分利用客戶端的計算能力。并提供異步響應,提高用戶體驗,這是傳統(tǒng)web應用不能給予的。

          而將ajax結(jié)合到傳統(tǒng)MVC應用中也是沒有任何問題的。  回復  更多評論   

          # re: 基于Ajax的Web系統(tǒng)開發(fā)的思考 2006-01-13 11:13 shiningstone

          作者分析的出發(fā)點是好的,是考慮如何將AJAX象想現(xiàn)在的WEB框架一樣,采用一個同意的模式來用。

          但是我覺得,AJAX和現(xiàn)在的WEB MVC之間應該不是替代的關(guān)系,而是互補的關(guān)系,畢竟,整個B/S系統(tǒng)如果所有請求都用AJAX來實現(xiàn)也不一定合適  回復  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2006年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          統(tǒng)計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东宁县| 德格县| 延吉市| 阿坝| 民乐县| 古丈县| 福清市| 黔西县| 靖边县| 建湖县| 天等县| 澄迈县| 罗江县| 贺兰县| 景宁| 留坝县| 平乡县| 达孜县| 康定县| 米脂县| 忻城县| 湖口县| 东乡| 田阳县| 土默特左旗| 仁化县| 浙江省| 乌鲁木齐市| 大英县| 兴安盟| 阳朔县| 三明市| 广汉市| 松桃| 宿州市| 万载县| 三门峡市| 武威市| 洛隆县| 宁陕县| 开远市|