王國利, 彭 勇, 何 斌, 梁國華, 呂涑琦
(大連理工大學水利工程學院,遼寧大連 116024)
我國洪水發生頻繁且洪災損失巨大.由于水庫在防洪減災中的重要作用,建設水庫洪水調度系統已經成為最重要的非工程措施.1998年水利部設立專項基金,開始在全國范圍內選擇重要的大型水庫建設洪水調度系統[1、2];隨著水、雨情自動測報系統的建設和計算機網絡技術的迅速發展,已經有越來越多的水庫建立了類似的系統,并且部分系統已經發揮了巨大作用[2、3].
目前國內水庫防洪調度系統中應用最為廣泛的是客戶端/服務器(C lient/Server,即C/S)計算機網絡模式[3~7].Internet/Intranet通信網絡技術的爆炸性發展,使人們對信息化提出了更高的要求,不僅對傳統的C/S洪水調度系統造成很大沖擊,也使C/S系統的一些弊端不斷地凸顯出來,因此基于Web技術的瀏覽器/服務器(Brow ser/Server,即B/S)模式的防洪調度系統開始得到開發與應用[8~10],并顯著提高了水庫防洪調度的信息管理和決策水平.盡管B/S模式具有優化資源、易于維護、擴展性好、共享度高等優點,但C/S模式對數據管理更安全和高效、網絡通信量更少等優點也是B/S模式無法比擬的,且用戶對系統結構的偏好不一致,因此在今后相當長一段時間內,B/S和C/S模式的洪水調度系統都將同時存在和運行.然而,已開發的B/S或C/S模式的洪水調度系統均存在明顯弊端,即系統開發人員幾乎都是針對一種模式單獨設計開發的,既便是已進行了有限集成的兩系統也往往是將用戶界面、業務邏輯和數據庫緊緊地綁在一起,當用戶需求發生變化時,代碼的修改量非常大,尤其在兩種模式相互轉換時,都需要重新開發一個新系統,這樣勢必導致系統重復開發,造成大量的資源浪費[11].在兩種模式同時存在和運行的條件下,如何做到既充分發揮兩模式的優越性,滿足不同用戶對系統結構的需求,又能避免代碼重寫并使整個系統高效集成,是目前國內外急需解決卻尚未深入探討的問題,也是本文的研究重點.
本文以遼渾太流域防洪調度決策支持系統為工程背景,采用 Java編程設計研發基于B/S+C/S模式的水庫群洪水調度系統.
防洪調度決策支持系統由多個子系統組成,主要包括系統時間設置、自動測報數據自動提取、PA計算、防洪形勢分析、洪水預報、洪水調度、成果查詢、數據維護、用戶權限管理等幾大模塊.由于系統所依賴的信息具有廣泛性、多源性和異構性,設計中既要考慮系統的總體結構,又要考慮各子系統的結構特點,同時還要考慮不同權限用戶對系統的功能需求,以期獲得可復用的決策信息支持平臺.為適應用戶在系統結構上的不同要求,各模塊采用了4層模式進行開發,即顯示層、業務邏輯層、持久層和數據層,使其在邏輯上各自獨立,并且可單獨實現.系統的拓撲結構如圖1所示.

圖1 洪水調度系統總體結構Fig.1 The general structure o f flood operating system
系統在預報庫、調度庫、實時庫、系統庫、遙測庫、工情庫、公用庫等數據庫的共同支持下運行,用戶通過顯示界面能完成洪水預報、洪水調度、遙測水雨情管理、基本信息查詢以及數據庫管理等功能的操作,而且各子系統的功能模塊既能單獨運行,又能與其他子系統交互運行.用戶可同時采用Web瀏覽器和Java窗口兩種方式與洪水預報調度系統交互,還增加了持久層來完成對各種數據的持久化工作,并為系統業務邏輯層提供服務,這是其他已建成的洪水調度系統所不具備的.
為實現B/S與C/S模式的通用化,使交互顯示頁面和業務邏輯層最大程度地復用,系統開發應遵循先進性、實用性、可擴充性、可維護性、可靠性、安全保密、經濟性、功能分解等原則[2],因此系統采用如圖2所示的分層體系結構.
從圖2可知,顯示層有Web瀏覽器和Java窗口兩種形式,B/S模式通過Web服務器調用JA pp let以網頁形式顯示,C/S模式采用JFrame以Java窗口形式顯示.每種顯示形式在和業務邏輯層交互時有不同的通信方式:當采用JA pp let作為前端顯示界面時,與業務邏輯層交互用Servlet調用方式;而當采用Java窗口作為前端顯示界面時,若與業務邏輯層在同一個終端時可直接調用,否則采用Socket調用方式[11].這樣,當用戶需要采用B/S結構時,只需要將交互頁面加載到JApp let的子類上即可;而當需要用C/S結構時,只需要將交互頁面加載到JFrame的子類上即可.其顯著優點是在兩種模式之間相互轉化時,無需修改系統的其他部分,系統的整體結構也不需調整,系統各組件即可被移植、重用和擴展.

圖2 洪水調度系統分層體系結構Fig.2 The hierarchical structure of flood operating system
水庫洪水預報調度系統是一個多用戶系統,不同的授權用戶有不同的系統操作許可,如一般用戶只能瀏覽一些基本信息,有的權限用戶只能操作基本的預報調度而不能修改模型參數等,因此必須進行用戶授權.為實現這一功能,采用了代理(Proxy)設計模式,就是在業務邏輯模塊的基礎上增加了“保護代理”模塊,單獨進行權限控制,這樣把權限授理和具體業務邏輯分離開,有利于系統擴展和維護.
操作系統為W indow s、Linux,系統數據庫為M ysql,編程語言采用Java,開發過程中還采用了JFreeChart、Hibernate、JSP 、XM L、H TM L 等技術,功能模塊的顯示主要采用樹狀菜單、工具條和圖表等形式.
已建成的水庫洪水調度系統把業務邏輯層與數據庫綁在一起,業務邏輯層不僅要負責與洪水預報調度相關的業務邏輯,還需負責與數據庫交互來完成對預報調度相關數據的查詢、更新、刪除和增加等操作,這既增加了系統維護的難度,又降低了系統的通用性.ORM(object-relation mapping)模式能在對象與關系數據庫之間建立映射關系,將數據訪問細節封裝,從而使數據庫訪問從具體的業務邏輯層分離,形成獨立的數據持久層.H ibernate框架作為一款功能強大的非商業ORM中間件,支持目前幾乎所有的主流數據庫系統,并能按照Java的基本語義進行持久層開發,使用面向對象編程的思想操作數據庫.利用 Hibernate技術將設計好的數據庫關系表的字段映射為對象的屬性,通過操作對象來達到操作關系表的目的,減少了繁瑣且容易出錯的JDBC操作,大大簡化了開發工作,提高了防洪調度系統的可維護性、可擴展性和通用性.同時Hibernate還支持多種緩存機制,通過簡單的配置,用戶即可使用第三方的緩存服務,可顯著提高數據庫的操作效率[12].
橋模式主要用來分離抽象的接口和相應的實現,以保證它們在兩個不同的類層次結構中能獨立變化,并能動態結合.
當交互頁面與通信模塊交互時,需要判斷采用哪種方式調用數據,若直接在交互頁面中判斷,雖做到了交互頁面的復用,但程序的內聚性降低、耦合性增加,且程序臃腫,以后每次調用通信模塊時都要進行判斷,并且如果以后需要增加調用方式時,每個判斷語句都需要修改,這不僅降低了運行效率,還使模塊的獨立性大大降低,并且類之間的公有方法及變量增加,嚴重妨礙系統的可維護性、經濟性與安全性.為此,改進系統采用了如圖3所示的橋模式.

圖3 通信橋(Bridge)模式Fig.3 The Bridge Mode of communication
系統運行時,交互顯示頁面會根據上下文環境來調用“調用接口”的具體子類.如果需要其他沒有實現的調用方式,程序員只需增加一個繼承“調用接口”的具體子類,而其他類都無需修改,這充分體現了“開-閉”原則:對擴展開放,對修改關閉[13、14].
下面以調度功能模塊為例來說明通過橋模式實現B/S與C/S結合的具體過程,其統一建模語言(UM L)靜態圖如圖4所示.

圖4 改進系統洪水調度模塊的具體實現Fig.4 The accomp lishment of imp roved sub-flood operating system
ResfcConnDB 類、Basic InfoConnDB 類、RealDataConnDB類、M odelControlConnDB類均通過持久層與數據庫交互,獲取與洪水調度模塊相關的數據;ResfcOperationFunction類定義了與洪水調度有關的所有業務邏輯運算;ResfcFunctionServlet類是為Web服務器提供的Servlet類,并且持有 ResfcOperationFunction類的實例;ResfcInterface通信接口封裝了所有調用業務邏輯運算的方法,為調度頁面與業務邏輯交互提供了橋梁;ResfcJPanel類是交互顯示頁面的中間容器,向洪水調度界面加載工具條、按鈕和圖表等;ResfcJApplet類或 ResfcJFrame類是頂層容器類,實現了ResfcInterface接口中的所有方法.如需增加其他顯示方式時,程序員只需要增加一個實現了 ResfcInterface接口并持有ResfcJPanel實例的子類即可.
與橋模式一樣,代理模式也屬于對象結構型模式.在代理模式中,實體定義了關鍵功能,而代理提供(或拒絕)對它的訪問.使用代理模式的意圖就是為其他對象提供一種代理以控制對這個對象的訪問,以便于只有在確實需要這個對象時才對它進行創建和初始化.保護代理(Protection Proxy)控制對原始對象的訪問,主要用于對象應該有不同的訪問權限的時候.B/S+C/S洪水調度系統通常是多用戶系統,必須約定不同授權用戶的操作許可,如一般用戶只能瀏覽一些基本信息,而不能修改數據等.如果直接修改原有方法,就會使得原有類的功能變得模糊和多元化,明顯違背了“開-閉”原則;而用“保護代理”來調用原有方法并對方法產生的結果進行控制,這種弱連接使得防洪調度系統具有良好的可擴展性和可維護性,在一定程度上降低了系統的耦合度.下面以水位庫容的用戶權限管理為例,其 UM L靜態圖如圖5所示.
U serA ttribute類是用戶屬性的封裝;UserPermissions類描述了不同用戶的權限;AbstractZV類是對水位庫容關系的抽象類;ZV類和ZVProxy類是對AbstractZV類的繼承.ZV類具體實現了對水位庫容的各種操作;而ZVProxy類是先根據 UserA ttribute類和UserPerm issions類提供的具體信息判斷用戶的操作權限,再對水位庫容關系進行相應的操作,如查詢、修改等.

圖5 保護代理模式的應用Fig.5 The app lication of Protection Proxy Mode
遼河流域是中國七大流域之一,含遼河、渾河、太子河3條主要支流,流域面積21.96×104km2.遼河流域雖已具備較完備的單庫水雨情自動測報、洪水預報與調度的非工程體系,但由于系統面向單個水庫,造成了水庫群之間、水庫群與堤防之間,以及各水庫與下游控制站洪水預報調度成果相分離,只有通過人工合成的方式才能分析流域的防洪形勢和決策,工作繁瑣且容易出錯,不能滿足庫群與堤防聯合預報調度模擬的自動、實時、快速、移動、多方案與集成性等要求.
為解決上述問題,受遼寧省防汛指揮部委托設計開發了遼渾太流域防洪調度決策支持系統.本系統的工作目標包括7座主要大型水庫、3個主要水文區間和3個重要控制站.系統基于實時調度的雨水工情信息,根據未來多種可能的降雨預報信息,分析預報水庫群與下游控制站的防洪形勢及其發展過程,模擬生成庫群與堤防的聯合調度方案,最后采用多人多目標模糊決策模型生成流域防洪調度決策,供上級主管部門決策參考.
該系統采用了B/S+C/S模式,其B/S模式顯示的主要界面如圖6所示.

圖6 防洪調度系統主界面Fig.6 Themain interface of flood operating system
本文針對目前我國洪水調度系統建設中普遍存在的重復開發、資源浪費的現狀,研究了基于B/S+C/S模式的防洪調度決策支持系統,詳細介紹了該系統的設計思想和采用的幾個關鍵技術,并以“遼渾太流域防洪調度決策支持系統”為工程背景進行實際開發.實踐中使用H ibernate增加數據持久層來管理數據并為業務邏輯層提供服務,從而使業務邏輯層和數據庫分離開;使用橋模式將交互界面與具體的業務邏輯分離開;采用保護代理模式對用戶權限進行管理,使權限管理與業務邏輯分離開.完成后的整個系統具有良好的可移植性、可擴展性和可維護性,改進系統解決了B/S與C/S兩種模式相互轉化時,都需要重新開發新系統的麻煩,對防洪調度系統建設具有一定的參考價值.
[1]陳森林,邱瑞田,萬海斌,等.全國水庫防洪調度決策支持系統[J].水力發電,2003,29(5):1-5
[2]王國利,林劍藝,周惠成.碧流河水庫防洪決策支持系統集成研究[J] .大連理工大學學報,2004,44(5):714-718(WANG Guo-li,LIN Jian-yi,ZHOU Hui-cheng.Study of system-integration on flood-control decision-support system for Biliuhe Reservoir[J].Journal of Dalian University of Technology,2004,44(5):714-718)
[3]唐 勇,胡和平,田富強,等.鰲江流域洪水預報調度決策支持系統[J].水科學進展,2003,14(3):295-299
[4]郭生練,彭 輝,王金星,等.水庫洪水調度系統設計與開發[J].水文,2001,21(3):4-7
[5]周惠成,梁國華,王本德,等.水庫洪水調度系統通用化模板設計與開發[J].水科學進展,2002,13(1):42-48
[6]周惠成,梁國華,王本德,等.基于網絡的水庫群防洪調度系統應用研究[J].大連理工大學學報,2002,42(3):366-370(ZHOU Hui-cheng,LIANG Guo-hua,WANG Ben-de,etal.Study of multi-reservoir flood contro l system s based on netw ork[J].Journal of Dalian University of Technology,2002,42(3):366-370)
[7]包為民,鐘平安,王船海,等.水庫洪水調度系統預報子系統關鍵技術與功能開發[J] .中國水利,2001(4):34-44
[8]周惠成,彭 勇,梁國華.基于B/S模式的水庫防洪調度系統的設計與開發研究[J].計算機應用研究,2005(6):150-151
[9]林凱榮,郭生練,陳 華,等.基于Web的實時水庫洪水調度自動化系統[J].水電自動化與大壩監測,2005,29(2):70-75
[10]涂揚舉,馬光文,劉治理,等.基于三層B/S結構的水電站中長期優化調度系統[J].水力發電學報,2006,25(2):90-93
[11]彭 勇.中長期水文預報與水庫群優化調度方法及其系統集成研究[D].大連:大連理工大學,2007
[12]周惠成,唐國磊,曹玉濤.水庫洪水調度系統的持久層研究與設計[J].水文,2007,27(4):5-9
[13]閻 宏.Java與模式[M].北京:電子工業出版社,2002
[14]GAMM A E,HELM R,JOHNSON R,etal.Design Patterns:Elements of ReusableObject-Oriented Software [M]. Massachusetts:Addison-W esley Pub lishing Com pany Inc.,1995