我們知道: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