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

          傳統的B/S系統有幾大缺點

          1. 表現層的代碼不易復用
          2. 網絡上跑著大量重復的數據
          3. 服務器幾乎要處理所有業務邏輯和動態交互,經常執行重復的操作,負載過重。
          4. 從人機對話的界面上,難以要求客戶的操作規范化。
          5. 服務器只能被動接受請求,而不能通過“推”的方式把數據主動發送給客戶端。
          ...

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

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

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

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

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

          3.實現 客戶端和服務端 的數據同步機制,減少客戶端的數據丟失率,避免對服務器作重復請求。

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


          4.用 “模式/同步” 的操作方式,代替傳統中 “非模式/異步” 的操作方式,從而約束用戶的操作步驟,使其規范化。

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

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


          示例:

          <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");     // 也可以在過程中動態決定是否要加載一個類或包
                  var login = new cn.x86.common.user.Login();

                  login.loadInfo();    //遠程調用,直接從服務器端得到登錄者信息
                  
                  ...
                  var cav = new Canvas(); // 畫布類,實現 UI 作圖 這里也可以用完整的類名來實現: 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>



          上面設計涉及到的優缺點

          缺陷:

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

          優勢:

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



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

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


          網站導航:
           
          主站蜘蛛池模板: 平遥县| 辉南县| 铅山县| 南雄市| 乌兰浩特市| 满洲里市| 永顺县| 安图县| 明水县| 淮安市| 安徽省| 汕头市| 天等县| 龙州县| 邵阳市| 高要市| 邵武市| 卢湾区| 德令哈市| 峨眉山市| 莱芜市| 孟连| 宜章县| 乌拉特前旗| 云霄县| 盐池县| 淮北市| 清原| 海宁市| 高陵县| 太谷县| 瑞金市| 中山市| 乡城县| 永丰县| 宜春市| 淅川县| 沙洋县| 平江县| 汤阴县| 婺源县|