文/劉筱 秦永剛 陸澤健
業(yè)務應用信息系統(tǒng)前端席位軟件是部署在業(yè)務應用信息系統(tǒng)操作員席位有用于支持操作員進行操作控制的前臺界面軟件,用于支持操作員開展地理標繪、信息交互、狀態(tài)監(jiān)控等業(yè)務活動。當前在前端席位軟件開發(fā)、集成和維護中暴露出以下問題:
(1)席位軟件界面風格不統(tǒng)一問題,由于業(yè)務應用信息系統(tǒng)的復雜性,同一系統(tǒng)中需集成不同單位開發(fā)的不同應用,各單位開發(fā)的前端界面缺乏統(tǒng)一設計和管理,導致席位軟件界面風格不統(tǒng)一,增加了使用的復雜度。
(2)席位基礎業(yè)務功能重復開發(fā)的問題,業(yè)務應用信息系統(tǒng)前端席位不同席位間有大部分基礎業(yè)務功能是相同的,但由于不同席位在開發(fā)時缺少統(tǒng)一的集成框架,導致相同功能重復開發(fā)或模塊復用度不高,增加了系統(tǒng)的開發(fā)成本,同時降低了系統(tǒng)的可靠性。
(3)席位前端軟件升級維護成本較高的問題,由于信息系統(tǒng)較為復雜,各模塊耦合度高,導致在系統(tǒng)升級維護過程中,增加或修改部分功能有可能導致需要對整個前端軟件的多個模塊進行修改,導致升級維護軟件成本較高。
針對以上問題,本文提出了一種基于插件的綜合應用界面集成框架軟件,能夠動態(tài)集成按照插件開發(fā)規(guī)范開發(fā)的插件,支持以插件為單元動態(tài)組裝系統(tǒng)。同時綜合應用界面集成框架軟件集成了界面管理、時間管理、態(tài)勢標繪、空間位置計算、網絡通信等基礎服務插件,為開發(fā)人員提供相關基礎服務應用功能;開發(fā)人員可以在框架軟件的基礎上,調用基礎服務插件開放的二次開發(fā)接口,按照插件開發(fā)標準并結合業(yè)務需求開發(fā)業(yè)務插件,構建業(yè)務應用信息系統(tǒng)前端席位軟件。
綜合應用界面集成框架軟件包括:插件集成模塊、界面管理模塊、時間管理模塊、地圖標繪模塊、空間位置計算模塊和網絡通信模塊。其中,上述六個子模塊又可以劃分為若干小的功能模塊。
圖1:插件集成原理圖
(1)插件集成模塊是綜合應用界面集成框架軟件的核心模塊,主要用于動態(tài)集成業(yè)務插件對象,并支持業(yè)務插件對象與界面窗體之間及業(yè)務插件對象與業(yè)務插件對象之間的信息交互;
(2)界面管理模塊主要提供對話框管理和浮動窗體管理功能;
(3)時間管理模塊采用C/S對時機制,主要負責提供各席位與時間同步服務器的天文時間的對時及時間獲取、設置與轉換功能;
(4)地圖標繪模塊主要提供二三維地圖顯示及標繪功能;
(5)空間位置計算模塊主要負責提供空間坐標系的轉換及運算功能;
(6)網絡通信模塊采用消息公布與訂購機制,主要負責提供插件和插件之間、席位和席位之間的消息通信。
綜合界面集成框架的核心是插件集成,插件集成的原理如圖1所示。
(1)插件綜合集成框架讀取配置文件獲取需要加載的插件信息,形成插件信息列表,然后到指定目標下,按照插件信息列表獲取所有需要加載的插件動態(tài)庫文件;
(2)插件綜合集成框架通過動態(tài)庫文件句柄加載插件動態(tài)庫;
(3)插件綜合集成框架通過插件動態(tài)庫提供的函數動態(tài)創(chuàng)建插件對象;
(4)插件綜合集成框架通過契約(插件集成標準)獲取插件對象,并通過插件對象實現系統(tǒng)功能。
在插件集成過程中主要需解決動態(tài)加載、契約訂立、菜單調用、接口擴展四個方面的問題。對于這四個部分見關鍵技術部分內容。
無論是用COM的方式,還是普通DLL,抑或.NΕT方式來實現插件框架,首先要面臨的問題就是如何訂立契約。契約是應用程序和插件之間進行交互的依據和憑證。應用程序必須聲明我有什么樣的功能可被插件使用,并且插件必須符合什么條件才能被我使用。反之,插件必須要知道應用程序提供什么樣的功能,我才能將自己的功能融入到應用程序的體系中。
在插件綜合集成框架中我們采用虛類的方式來實現契約的建立,即動態(tài)庫插件創(chuàng)建一個插件類的對象,插件類基于IPlugComUIBase來實現,將插件對象的指針返給插件綜合集成框架;因為插件類繼承于IPlugComUIBase,因此在插件綜合集成框架中他被轉換為IPlugComUIBase指針類型,插件綜合集成框架通過IPlugComUIBase指針的就可以訪問插件的具體實現。
不管你采用什么方式實現插件式的應用程序框架,核心還是動態(tài)加載,換句話說,沒有動態(tài)加載技術也就無所謂插件式的應用程序框架了。使用Com實現的話,你可以利用Com的API通過ProgID來動態(tài)創(chuàng)建COM對象,而在插件綜合集成框架中我們?yōu)榻档统绦虻膹碗s程度,提高程序的可移植性(COM主要應用Windows平臺)我們使用Windows 的API函數(在其他平臺我們可以采取相應API函數來代替)來動態(tài)加載DLL。
(1)插件綜合集成框架調用FindFirstFile和FindNextFile函數在制定目錄下循環(huán)搜索DLL文件;
(2)插件綜合集成框架調用LoadLibrary動態(tài)加載DLL
(3)插件綜合集成框架使用GetProcAddress函數來獲取函數Plug_CreateUIObject的地址;
(4)插件綜合集成框架通過地址調用Plug_CreateUIObject函數創(chuàng)建插件對象;
(5)插件綜合集成框架通過IPlugUICom訪問插件對象,完成插件對象注冊。
插件在加載完成后,通過InitBtnInfo函數向框架注冊菜單命令,框架建立菜單事件列表,并在窗口界面上根據列表生成系統(tǒng)菜單,當用戶點擊框架上的菜單時,框架通過列表確認注冊該菜單的插件對象,調用插件對象的ProCommand消息,將菜單消息反饋給插件。
插件可以通過定義接口類,并將接口類放入公共接口集,將自身的功能提供給其他插件。具體步驟如下:
(1)首先插件定義一個基于插件接口基類的接口聲明類,該類為純虛類,包含該插件對外提供的函數接口聲明以及該接口定義的接口標識;
(2)插件在自身內部基于該聲明,定義繼承于聲明類的接口實現類,實現接口定義的功能;
(3)插件創(chuàng)建實現類對象,并在插件的RegisteAllInterface接口注冊處理中注冊該接口;
(4)其他插件首先通過插件名稱獲取使用接口所在的插件對象,然后通過該對象的GetInterface函數傳入接口標識,獲取接口對象。然后在調用接口對象進行相應業(yè)務處理。
目前該集成框架已應用于某業(yè)務應用信息處理系統(tǒng)前端界面集成,通過采用該集成框架對前端業(yè)務進行集成。在集成過程中,集成框架具有以下優(yōu)點:
(1)解決了席位軟件界面風格統(tǒng)一問題,界面布局、顯示要素的樣式、配色等由框架進行統(tǒng)一管理,可根據需求進行界面快速定制和開發(fā),同時實現了軟件界面與應用分離。
(2)解決了基礎業(yè)務功能重復開發(fā)的問題,軟件中類似于地理標繪、網絡通信、界面管理等通用基礎功能,由專門團隊構建統(tǒng)一的基礎服務插件進行實現,避免了基礎業(yè)務的重復開發(fā)。
(3)降低了系統(tǒng)的運維成本,整個框架基于模塊化、組件化的設計理念,通過綜合應用界面集成框架集成的席位軟件的功能變更,只需增刪相應插件,而不影響席位軟件體系結構,便于軟件功能變更,使系統(tǒng)易于維護。
本文提出了一種基于插件的綜合應用界面集成框架,解決了業(yè)務應用信息系統(tǒng)在顯示前端界面集成中界面風格不統(tǒng)一、升級維護困難、基礎服務插件不統(tǒng)一等問題。后續(xù)將針對業(yè)務應用需求,對基礎服務插件進行研究,通過基礎服務插件進一步擴展綜合應用界面集成框架功能。