posts - 3,  comments - 0,  trackbacks - 0
          我們知道:B/S 開發(fā)模式越來越受推崇,公司的項目都是基于B/S模式開發(fā)的。
          其優(yōu)勢不言而喻。

          傳統(tǒng)的B/S系統(tǒng)有幾大缺點

          1. 表現(xiàn)層的代碼不易復(fù)用
          2. 網(wǎng)絡(luò)上跑著大量重復(fù)的數(shù)據(jù)
          3. 服務(wù)器幾乎要處理所有業(yè)務(wù)邏輯和動態(tài)交互,經(jīng)常執(zhí)行重復(fù)的操作,負(fù)載過重。
          4. 從人機(jī)對話的界面上,難以要求客戶的操作規(guī)范化。
          5. 服務(wù)器只能被動接受請求,而不能通過“推”的方式把數(shù)據(jù)主動發(fā)送給客戶端。
          ...

          為解決這些問題,必須有一種全新的開發(fā)模式來開改造 B/S。

          針對上面幾個問題,制定了以下幾個步驟來解決:
          1.客戶端的腳本及html 以“類”或“可復(fù)用的組件”的方式存在。

              說明:    面向過程的 JavaScript -> “基于對象”的 JavaScript
                              原子型的 dhtml -> 組件模式的 htc, wsc

          2.在客戶端建立一塊公共的存儲空間(內(nèi)存中),即:存在一個全局對象(類似delpehi、c++ builder中的 Application),所有應(yīng)用頁面都共享該對象,并能通過這個對象交換數(shù)據(jù)或復(fù)雜對象。

              注意:    構(gòu)建 appliation 對象實現(xiàn)上面的功能,該對象的生存期和整個應(yīng)用保持一致。(注意:這 appliation 是指客戶端的,并不是 asp/jsp 中在服務(wù)器端的application對象)

          3.實現(xiàn) 客戶端和服務(wù)端 的數(shù)據(jù)同步機(jī)制,減少客戶端的數(shù)據(jù)丟失率,避免對服務(wù)器作重復(fù)請求。

              說明:    所有類在客戶端實現(xiàn)cache,重啟IE或重啟系統(tǒng)皆不必重新從服務(wù)器加載類資源。
                  采用 RMI/RPC 方式,實現(xiàn)客戶端 的 js 對象 能遠(yuǎn)程調(diào)用 服務(wù)器端的一個對象(或應(yīng)用)的方法,并能保存其狀態(tài)和數(shù)據(jù)。對開發(fā)者來講,這種調(diào)用機(jī)制是透明的。
                  代碼和數(shù)據(jù)分離,所有涉及UI的頁面均用靜態(tài)頁面形式存在(減輕server負(fù)載,且這些靜態(tài)資源會被IE自動cache,下次不會被重復(fù)下載),所有動態(tài)交互部分的數(shù)據(jù),除了以RMI的方式返回給客戶端以外,皆以 XML 形式返回,并在客戶端建立cache機(jī)制。


          4.用 “模式/同步” 的操作方式,代替?zhèn)鹘y(tǒng)中 “非模式/異步” 的操作方式,從而約束用戶的操作步驟,使其規(guī)范化。

              說明:    瀏覽器很多操作默認(rèn)都是 異步/非模式 方式的(比如:form的提交,window.open,等等)這樣可以實現(xiàn)多線程請求數(shù)據(jù),會比較快,但有時侯在處理單個流程,卻會帶來不少麻煩。
                  比如:某個操作要等數(shù)據(jù)提交成功后執(zhí)行,我們希望能有一個阻塞,待執(zhí)行完提交后,接下來執(zhí)行后面的操作,然而異步方式只能用回調(diào)的方式實現(xiàn),中途的各種情況處理的邏輯判斷太多,著實麻煩。
                  解決辦法:對數(shù)據(jù)請求或發(fā)送:用 xmlhttp xmldom 的同步方式調(diào)用。
                  對窗體模塊的調(diào)用:用 showModalDialog 方式調(diào)用。

          5.啟動“掃描線程”偵聽服務(wù)器的“推”動作,或者利用 ClientSocket 組件和服務(wù)器進(jìn)行有連接的通訊。


          示例:

          <html>
          <script src="/common/jslib/jsvm.js"></script>
          <script>

          _import("js.lang.System");    // 可以在一開始就加載一些類或包
          _import("js.graphics.*");


          function init(){
              try{
                  
                  ...
                  _import("cn.x86.common.user.Login");     // 也可以在過程中動態(tài)決定是否要加載一個類或包
                  var login = new cn.x86.common.user.Login();

                  login.loadInfo();    //遠(yuǎn)程調(diào)用,直接從服務(wù)器端得到登錄者信息
                  
                  ...
                  var cav = new Canvas(); // 畫布類,實現(xiàn) UI 作圖 這里也可以用完整的類名來實現(xiàn): var cav = new js.graphics.Canvas();
                  
                  cav.pen.color = "blue";
                  cav.outText(100,100,"Out Text");
                  cav.pen.color = 'red';
                  cav.lineTo(500,300);
                  ...

              }
              catch(ex){
                  System.out.printError(ex);
              }
          }


          </script>
          <body>
              -- 跟JAVA中的代碼差不多! --
          </body>
          </html>



          上面設(shè)計涉及到的優(yōu)缺點

          缺陷:

          1.對developer的客戶端的技術(shù)功底要求較高。    (可預(yù)見)
          2.客戶端的負(fù)載較傳統(tǒng)的模式要高。        (可預(yù)見)
          3.對客戶端的瀏覽器版本及運(yùn)行環(huán)境要求比較規(guī)范。    (已確認(rèn))   
          4.對復(fù)雜對象的序列化工作將會增多。        (可預(yù)見)

          優(yōu)勢:

          1.服務(wù)器負(fù)載,和網(wǎng)絡(luò)流量能大幅度減少。        (已確認(rèn))
          2.模塊的粒子度,靈活性,復(fù)用性將大大增強(qiáng)。    (可預(yù)見)
          3.模塊(類)之間的依賴性清晰,且易維護(hù)。    (可預(yù)見)
          4.整個系統(tǒng)運(yùn)行性能將提高。            (適客戶端的環(huán)境而定)
          5.系統(tǒng)開發(fā)周期能減少                (視項目具體情況而定)



          注:此文摘自http://bbs.51js.com/thread-21119-1-3.html
          posted on 2007-04-26 16:35 bobily 閱讀(193) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 瑞安市| 丹江口市| 望城县| 汾西县| 苗栗县| 高雄市| 武宣县| 化州市| 大理市| 新乐市| 鸡西市| 新密市| 固镇县| 肇州县| 磐石市| 石河子市| 土默特左旗| 望都县| 琼海市| 广水市| 孙吴县| 房产| 彭水| 樟树市| 涿州市| 镇平县| 河东区| 洞口县| 晋城| 汉阴县| 商都县| 南丰县| 渭南市| 新巴尔虎右旗| 孝义市| 呼伦贝尔市| 东安县| 称多县| 个旧市| 威宁| 康乐县|