王國利, 彭 勇, 何 斌, 梁國華, 呂涑琦
(大連理工大學(xué)水利工程學(xué)院,遼寧大連 116024)
我國洪水發(fā)生頻繁且洪災(zāi)損失巨大.由于水庫在防洪減災(zāi)中的重要作用,建設(shè)水庫洪水調(diào)度系統(tǒng)已經(jīng)成為最重要的非工程措施.1998年水利部設(shè)立專項基金,開始在全國范圍內(nèi)選擇重要的大型水庫建設(shè)洪水調(diào)度系統(tǒng)[1、2];隨著水、雨情自動測報系統(tǒng)的建設(shè)和計算機網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,已經(jīng)有越來越多的水庫建立了類似的系統(tǒng),并且部分系統(tǒng)已經(jīng)發(fā)揮了巨大作用[2、3].
目前國內(nèi)水庫防洪調(diào)度系統(tǒng)中應(yīng)用最為廣泛的是客戶端/服務(wù)器(C lient/Server,即C/S)計算機網(wǎng)絡(luò)模式[3~7].Internet/Intranet通信網(wǎng)絡(luò)技術(shù)的爆炸性發(fā)展,使人們對信息化提出了更高的要求,不僅對傳統(tǒng)的C/S洪水調(diào)度系統(tǒng)造成很大沖擊,也使C/S系統(tǒng)的一些弊端不斷地凸顯出來,因此基于Web技術(shù)的瀏覽器/服務(wù)器(Brow ser/Server,即B/S)模式的防洪調(diào)度系統(tǒng)開始得到開發(fā)與應(yīng)用[8~10],并顯著提高了水庫防洪調(diào)度的信息管理和決策水平.盡管B/S模式具有優(yōu)化資源、易于維護、擴展性好、共享度高等優(yōu)點,但C/S模式對數(shù)據(jù)管理更安全和高效、網(wǎng)絡(luò)通信量更少等優(yōu)點也是B/S模式無法比擬的,且用戶對系統(tǒng)結(jié)構(gòu)的偏好不一致,因此在今后相當(dāng)長一段時間內(nèi),B/S和C/S模式的洪水調(diào)度系統(tǒng)都將同時存在和運行.然而,已開發(fā)的B/S或C/S模式的洪水調(diào)度系統(tǒng)均存在明顯弊端,即系統(tǒng)開發(fā)人員幾乎都是針對一種模式單獨設(shè)計開發(fā)的,既便是已進行了有限集成的兩系統(tǒng)也往往是將用戶界面、業(yè)務(wù)邏輯和數(shù)據(jù)庫緊緊地綁在一起,當(dāng)用戶需求發(fā)生變化時,代碼的修改量非常大,尤其在兩種模式相互轉(zhuǎn)換時,都需要重新開發(fā)一個新系統(tǒng),這樣勢必導(dǎo)致系統(tǒng)重復(fù)開發(fā),造成大量的資源浪費[11].在兩種模式同時存在和運行的條件下,如何做到既充分發(fā)揮兩模式的優(yōu)越性,滿足不同用戶對系統(tǒng)結(jié)構(gòu)的需求,又能避免代碼重寫并使整個系統(tǒng)高效集成,是目前國內(nèi)外急需解決卻尚未深入探討的問題,也是本文的研究重點.
本文以遼渾太流域防洪調(diào)度決策支持系統(tǒng)為工程背景,采用 Java編程設(shè)計研發(fā)基于B/S+C/S模式的水庫群洪水調(diào)度系統(tǒng).
防洪調(diào)度決策支持系統(tǒng)由多個子系統(tǒng)組成,主要包括系統(tǒng)時間設(shè)置、自動測報數(shù)據(jù)自動提取、PA計算、防洪形勢分析、洪水預(yù)報、洪水調(diào)度、成果查詢、數(shù)據(jù)維護、用戶權(quán)限管理等幾大模塊.由于系統(tǒng)所依賴的信息具有廣泛性、多源性和異構(gòu)性,設(shè)計中既要考慮系統(tǒng)的總體結(jié)構(gòu),又要考慮各子系統(tǒng)的結(jié)構(gòu)特點,同時還要考慮不同權(quán)限用戶對系統(tǒng)的功能需求,以期獲得可復(fù)用的決策信息支持平臺.為適應(yīng)用戶在系統(tǒng)結(jié)構(gòu)上的不同要求,各模塊采用了4層模式進行開發(fā),即顯示層、業(yè)務(wù)邏輯層、持久層和數(shù)據(jù)層,使其在邏輯上各自獨立,并且可單獨實現(xiàn).系統(tǒng)的拓撲結(jié)構(gòu)如圖1所示.
圖1 洪水調(diào)度系統(tǒng)總體結(jié)構(gòu)Fig.1 The general structure o f flood operating system
系統(tǒng)在預(yù)報庫、調(diào)度庫、實時庫、系統(tǒng)庫、遙測庫、工情庫、公用庫等數(shù)據(jù)庫的共同支持下運行,用戶通過顯示界面能完成洪水預(yù)報、洪水調(diào)度、遙測水雨情管理、基本信息查詢以及數(shù)據(jù)庫管理等功能的操作,而且各子系統(tǒng)的功能模塊既能單獨運行,又能與其他子系統(tǒng)交互運行.用戶可同時采用Web瀏覽器和Java窗口兩種方式與洪水預(yù)報調(diào)度系統(tǒng)交互,還增加了持久層來完成對各種數(shù)據(jù)的持久化工作,并為系統(tǒng)業(yè)務(wù)邏輯層提供服務(wù),這是其他已建成的洪水調(diào)度系統(tǒng)所不具備的.
為實現(xiàn)B/S與C/S模式的通用化,使交互顯示頁面和業(yè)務(wù)邏輯層最大程度地復(fù)用,系統(tǒng)開發(fā)應(yīng)遵循先進性、實用性、可擴充性、可維護性、可靠性、安全保密、經(jīng)濟性、功能分解等原則[2],因此系統(tǒng)采用如圖2所示的分層體系結(jié)構(gòu).
從圖2可知,顯示層有Web瀏覽器和Java窗口兩種形式,B/S模式通過Web服務(wù)器調(diào)用JA pp let以網(wǎng)頁形式顯示,C/S模式采用JFrame以Java窗口形式顯示.每種顯示形式在和業(yè)務(wù)邏輯層交互時有不同的通信方式:當(dāng)采用JA pp let作為前端顯示界面時,與業(yè)務(wù)邏輯層交互用Servlet調(diào)用方式;而當(dāng)采用Java窗口作為前端顯示界面時,若與業(yè)務(wù)邏輯層在同一個終端時可直接調(diào)用,否則采用Socket調(diào)用方式[11].這樣,當(dāng)用戶需要采用B/S結(jié)構(gòu)時,只需要將交互頁面加載到JApp let的子類上即可;而當(dāng)需要用C/S結(jié)構(gòu)時,只需要將交互頁面加載到JFrame的子類上即可.其顯著優(yōu)點是在兩種模式之間相互轉(zhuǎn)化時,無需修改系統(tǒng)的其他部分,系統(tǒng)的整體結(jié)構(gòu)也不需調(diào)整,系統(tǒng)各組件即可被移植、重用和擴展.
圖2 洪水調(diào)度系統(tǒng)分層體系結(jié)構(gòu)Fig.2 The hierarchical structure of flood operating system
水庫洪水預(yù)報調(diào)度系統(tǒng)是一個多用戶系統(tǒng),不同的授權(quán)用戶有不同的系統(tǒng)操作許可,如一般用戶只能瀏覽一些基本信息,有的權(quán)限用戶只能操作基本的預(yù)報調(diào)度而不能修改模型參數(shù)等,因此必須進行用戶授權(quán).為實現(xiàn)這一功能,采用了代理(Proxy)設(shè)計模式,就是在業(yè)務(wù)邏輯模塊的基礎(chǔ)上增加了“保護代理”模塊,單獨進行權(quán)限控制,這樣把權(quán)限授理和具體業(yè)務(wù)邏輯分離開,有利于系統(tǒng)擴展和維護.
操作系統(tǒng)為W indow s、Linux,系統(tǒng)數(shù)據(jù)庫為M ysql,編程語言采用Java,開發(fā)過程中還采用了JFreeChart、Hibernate、JSP 、XM L、H TM L 等技術(shù),功能模塊的顯示主要采用樹狀菜單、工具條和圖表等形式.
已建成的水庫洪水調(diào)度系統(tǒng)把業(yè)務(wù)邏輯層與數(shù)據(jù)庫綁在一起,業(yè)務(wù)邏輯層不僅要負責(zé)與洪水預(yù)報調(diào)度相關(guān)的業(yè)務(wù)邏輯,還需負責(zé)與數(shù)據(jù)庫交互來完成對預(yù)報調(diào)度相關(guān)數(shù)據(jù)的查詢、更新、刪除和增加等操作,這既增加了系統(tǒng)維護的難度,又降低了系統(tǒng)的通用性.ORM(object-relation mapping)模式能在對象與關(guān)系數(shù)據(jù)庫之間建立映射關(guān)系,將數(shù)據(jù)訪問細節(jié)封裝,從而使數(shù)據(jù)庫訪問從具體的業(yè)務(wù)邏輯層分離,形成獨立的數(shù)據(jù)持久層.H ibernate框架作為一款功能強大的非商業(yè)ORM中間件,支持目前幾乎所有的主流數(shù)據(jù)庫系統(tǒng),并能按照Java的基本語義進行持久層開發(fā),使用面向?qū)ο缶幊痰乃枷氩僮鲾?shù)據(jù)庫.利用 Hibernate技術(shù)將設(shè)計好的數(shù)據(jù)庫關(guān)系表的字段映射為對象的屬性,通過操作對象來達到操作關(guān)系表的目的,減少了繁瑣且容易出錯的JDBC操作,大大簡化了開發(fā)工作,提高了防洪調(diào)度系統(tǒng)的可維護性、可擴展性和通用性.同時Hibernate還支持多種緩存機制,通過簡單的配置,用戶即可使用第三方的緩存服務(wù),可顯著提高數(shù)據(jù)庫的操作效率[12].
橋模式主要用來分離抽象的接口和相應(yīng)的實現(xiàn),以保證它們在兩個不同的類層次結(jié)構(gòu)中能獨立變化,并能動態(tài)結(jié)合.
當(dāng)交互頁面與通信模塊交互時,需要判斷采用哪種方式調(diào)用數(shù)據(jù),若直接在交互頁面中判斷,雖做到了交互頁面的復(fù)用,但程序的內(nèi)聚性降低、耦合性增加,且程序臃腫,以后每次調(diào)用通信模塊時都要進行判斷,并且如果以后需要增加調(diào)用方式時,每個判斷語句都需要修改,這不僅降低了運行效率,還使模塊的獨立性大大降低,并且類之間的公有方法及變量增加,嚴重妨礙系統(tǒng)的可維護性、經(jīng)濟性與安全性.為此,改進系統(tǒng)采用了如圖3所示的橋模式.
圖3 通信橋(Bridge)模式Fig.3 The Bridge Mode of communication
系統(tǒng)運行時,交互顯示頁面會根據(jù)上下文環(huán)境來調(diào)用“調(diào)用接口”的具體子類.如果需要其他沒有實現(xiàn)的調(diào)用方式,程序員只需增加一個繼承“調(diào)用接口”的具體子類,而其他類都無需修改,這充分體現(xiàn)了“開-閉”原則:對擴展開放,對修改關(guān)閉[13、14].
下面以調(diào)度功能模塊為例來說明通過橋模式實現(xiàn)B/S與C/S結(jié)合的具體過程,其統(tǒng)一建模語言(UM L)靜態(tài)圖如圖4所示.
圖4 改進系統(tǒng)洪水調(diào)度模塊的具體實現(xiàn)Fig.4 The accomp lishment of imp roved sub-flood operating system
ResfcConnDB 類、Basic InfoConnDB 類、RealDataConnDB類、M odelControlConnDB類均通過持久層與數(shù)據(jù)庫交互,獲取與洪水調(diào)度模塊相關(guān)的數(shù)據(jù);ResfcOperationFunction類定義了與洪水調(diào)度有關(guān)的所有業(yè)務(wù)邏輯運算;ResfcFunctionServlet類是為Web服務(wù)器提供的Servlet類,并且持有 ResfcOperationFunction類的實例;ResfcInterface通信接口封裝了所有調(diào)用業(yè)務(wù)邏輯運算的方法,為調(diào)度頁面與業(yè)務(wù)邏輯交互提供了橋梁;ResfcJPanel類是交互顯示頁面的中間容器,向洪水調(diào)度界面加載工具條、按鈕和圖表等;ResfcJApplet類或 ResfcJFrame類是頂層容器類,實現(xiàn)了ResfcInterface接口中的所有方法.如需增加其他顯示方式時,程序員只需要增加一個實現(xiàn)了 ResfcInterface接口并持有ResfcJPanel實例的子類即可.
與橋模式一樣,代理模式也屬于對象結(jié)構(gòu)型模式.在代理模式中,實體定義了關(guān)鍵功能,而代理提供(或拒絕)對它的訪問.使用代理模式的意圖就是為其他對象提供一種代理以控制對這個對象的訪問,以便于只有在確實需要這個對象時才對它進行創(chuàng)建和初始化.保護代理(Protection Proxy)控制對原始對象的訪問,主要用于對象應(yīng)該有不同的訪問權(quán)限的時候.B/S+C/S洪水調(diào)度系統(tǒng)通常是多用戶系統(tǒng),必須約定不同授權(quán)用戶的操作許可,如一般用戶只能瀏覽一些基本信息,而不能修改數(shù)據(jù)等.如果直接修改原有方法,就會使得原有類的功能變得模糊和多元化,明顯違背了“開-閉”原則;而用“保護代理”來調(diào)用原有方法并對方法產(chǎn)生的結(jié)果進行控制,這種弱連接使得防洪調(diào)度系統(tǒng)具有良好的可擴展性和可維護性,在一定程度上降低了系統(tǒng)的耦合度.下面以水位庫容的用戶權(quán)限管理為例,其 UM L靜態(tài)圖如圖5所示.
U serA ttribute類是用戶屬性的封裝;UserPermissions類描述了不同用戶的權(quán)限;AbstractZV類是對水位庫容關(guān)系的抽象類;ZV類和ZVProxy類是對AbstractZV類的繼承.ZV類具體實現(xiàn)了對水位庫容的各種操作;而ZVProxy類是先根據(jù) UserA ttribute類和UserPerm issions類提供的具體信息判斷用戶的操作權(quán)限,再對水位庫容關(guān)系進行相應(yīng)的操作,如查詢、修改等.
圖5 保護代理模式的應(yīng)用Fig.5 The app lication of Protection Proxy Mode
遼河流域是中國七大流域之一,含遼河、渾河、太子河3條主要支流,流域面積21.96×104km2.遼河流域雖已具備較完備的單庫水雨情自動測報、洪水預(yù)報與調(diào)度的非工程體系,但由于系統(tǒng)面向單個水庫,造成了水庫群之間、水庫群與堤防之間,以及各水庫與下游控制站洪水預(yù)報調(diào)度成果相分離,只有通過人工合成的方式才能分析流域的防洪形勢和決策,工作繁瑣且容易出錯,不能滿足庫群與堤防聯(lián)合預(yù)報調(diào)度模擬的自動、實時、快速、移動、多方案與集成性等要求.
為解決上述問題,受遼寧省防汛指揮部委托設(shè)計開發(fā)了遼渾太流域防洪調(diào)度決策支持系統(tǒng).本系統(tǒng)的工作目標(biāo)包括7座主要大型水庫、3個主要水文區(qū)間和3個重要控制站.系統(tǒng)基于實時調(diào)度的雨水工情信息,根據(jù)未來多種可能的降雨預(yù)報信息,分析預(yù)報水庫群與下游控制站的防洪形勢及其發(fā)展過程,模擬生成庫群與堤防的聯(lián)合調(diào)度方案,最后采用多人多目標(biāo)模糊決策模型生成流域防洪調(diào)度決策,供上級主管部門決策參考.
該系統(tǒng)采用了B/S+C/S模式,其B/S模式顯示的主要界面如圖6所示.
圖6 防洪調(diào)度系統(tǒng)主界面Fig.6 Themain interface of flood operating system
本文針對目前我國洪水調(diào)度系統(tǒng)建設(shè)中普遍存在的重復(fù)開發(fā)、資源浪費的現(xiàn)狀,研究了基于B/S+C/S模式的防洪調(diào)度決策支持系統(tǒng),詳細介紹了該系統(tǒng)的設(shè)計思想和采用的幾個關(guān)鍵技術(shù),并以“遼渾太流域防洪調(diào)度決策支持系統(tǒng)”為工程背景進行實際開發(fā).實踐中使用H ibernate增加數(shù)據(jù)持久層來管理數(shù)據(jù)并為業(yè)務(wù)邏輯層提供服務(wù),從而使業(yè)務(wù)邏輯層和數(shù)據(jù)庫分離開;使用橋模式將交互界面與具體的業(yè)務(wù)邏輯分離開;采用保護代理模式對用戶權(quán)限進行管理,使權(quán)限管理與業(yè)務(wù)邏輯分離開.完成后的整個系統(tǒng)具有良好的可移植性、可擴展性和可維護性,改進系統(tǒng)解決了B/S與C/S兩種模式相互轉(zhuǎn)化時,都需要重新開發(fā)新系統(tǒng)的麻煩,對防洪調(diào)度系統(tǒng)建設(shè)具有一定的參考價值.
[1]陳森林,邱瑞田,萬海斌,等.全國水庫防洪調(diào)度決策支持系統(tǒng)[J].水力發(fā)電,2003,29(5):1-5
[2]王國利,林劍藝,周惠成.碧流河水庫防洪決策支持系統(tǒng)集成研究[J] .大連理工大學(xué)學(xué)報,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]唐 勇,胡和平,田富強,等.鰲江流域洪水預(yù)報調(diào)度決策支持系統(tǒng)[J].水科學(xué)進展,2003,14(3):295-299
[4]郭生練,彭 輝,王金星,等.水庫洪水調(diào)度系統(tǒng)設(shè)計與開發(fā)[J].水文,2001,21(3):4-7
[5]周惠成,梁國華,王本德,等.水庫洪水調(diào)度系統(tǒng)通用化模板設(shè)計與開發(fā)[J].水科學(xué)進展,2002,13(1):42-48
[6]周惠成,梁國華,王本德,等.基于網(wǎng)絡(luò)的水庫群防洪調(diào)度系統(tǒng)應(yīng)用研究[J].大連理工大學(xué)學(xué)報,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]包為民,鐘平安,王船海,等.水庫洪水調(diào)度系統(tǒng)預(yù)報子系統(tǒng)關(guān)鍵技術(shù)與功能開發(fā)[J] .中國水利,2001(4):34-44
[8]周惠成,彭 勇,梁國華.基于B/S模式的水庫防洪調(diào)度系統(tǒng)的設(shè)計與開發(fā)研究[J].計算機應(yīng)用研究,2005(6):150-151
[9]林凱榮,郭生練,陳 華,等.基于Web的實時水庫洪水調(diào)度自動化系統(tǒng)[J].水電自動化與大壩監(jiān)測,2005,29(2):70-75
[10]涂揚舉,馬光文,劉治理,等.基于三層B/S結(jié)構(gòu)的水電站中長期優(yōu)化調(diào)度系統(tǒng)[J].水力發(fā)電學(xué)報,2006,25(2):90-93
[11]彭 勇.中長期水文預(yù)報與水庫群優(yōu)化調(diào)度方法及其系統(tǒng)集成研究[D].大連:大連理工大學(xué),2007
[12]周惠成,唐國磊,曹玉濤.水庫洪水調(diào)度系統(tǒng)的持久層研究與設(shè)計[J].水文,2007,27(4):5-9
[13]閻 宏.Java與模式[M].北京:電子工業(yè)出版社,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