最近根據 江蘇省軟體園評測中心對我們系統測試後提交的測試報告,需要對我們的系統做些安全性修補和最佳化處理,下面是我根據該評測報告所做的一個概要性的建議分析。由於我們這個系統是一年多前設計的,因此在一些設計方面(尤其是中介層)有些不足之處,事實上,要在短期內對該系統做到完全重構、最佳化是很難的,因此,以下的一些建議或目標需要根據項目進度和難度逐步進行。
- 將中介層捕獲的所有異常封裝後返回給用戶端的調用者,由用戶端處理特定異常以顯示友好的提示資訊或做必要的處理。
- 將目前的大 WebService 類按商務邏輯分解成多個商務邏輯對象類,用戶端只在需要使用相關商務邏輯時才建立對應的商務邏輯 WebService 類,並在關閉相關業務子模組時釋放建立的商務邏輯對象,籍此降低用戶端的記憶體使用量量。參考《WebService 效率小貼士》
- 中介層盡量使用預存程序來擷取 DataSet 及對它進行更新處理,不要使用 CommandBuilder 來產生更新命令。需要同時操作多張表的表單中,應在一個方法中同時返回所需的所有表,並針對這些表建立所需的關聯和約束。
- 使用 Microsoft Report Services 來建立報表,以提高報表的使用者自訂的靈活性和報表的美觀、多表現性,該報表格服務支援對多種格式檔案的匯出功能。
- 重新設計系統的整體參數設定類,在系統中統一使用該類進行各種參數選項的配置,籍此提高系統參數化方面的靈活性。
- 操作手冊建議由專人負責重新撰寫或整理。由開發人員撰寫使用者手冊得不償失,且風格難以統一、可讀性不強。
- 必須使用特定的商務邏輯對象來對並發性衝突進行特殊處理。因為該系統使用單資料庫,所以不需要跨資料庫的交易管理,因此使用 ADO.net 的交易處理就可以應付,在此建議必要時使用 REPEATABLE READ 交易隔離等級以保證在並發性時防止其他使用者的更改。
- 盡量減低用戶端對應用伺服器的調用次數。在這個原則的前提下根據具體問題進行調整。在執行回應時間長的操作時,增加一些系統“進度條”之類的提示,以增強系統的響應性[參考:《公司專屬應用程式架構模式》引言5]。
- 對擷取伺服器時間(GetSysTime)的最佳化:由用戶端根據目前時間和與伺服器時間差計算得出伺服器的時間,以減少對伺服器時間的擷取次數,有關該演算法見附錄。
- 使用數位簽章和對稱式加密來保障通訊安全,有關該方案的詳細情況請參考:《安全之道:加密與數位簽章》
註:GetSysTime 是一個擷取伺服器當前日期時間的函數。