邱健 韓雨
摘 要:針對應用范圍日趨廣泛的GIS應用程序,本文提出可用于程序開發的框架設計方法和實現方法,并通過實踐得出該方法合理可行,值得參考借鑒的結論,為GIS應用程序更好的服務于人們日常生產生活提供技術支持。
關鍵詞:GIS;程序開發;框架設計;框架設計實現
1 引言
在GIS技術快速發展與應用日趨廣泛的局勢下,切實提高相關軟件與工具的開發效率,并保證軟件整體質量,是目前面臨的亟待解決的主要問題。實踐表明,軟件復用是十分可行且有效的方式。通過對軟件復用的合理應用,能設計出一套良好的GIS應用程序開發框架,為開發人員及使用者提供有效的工具。
2 基于GIS應用程序開發框架設計
目前常用的框架方案主要有三種,分別為組件式、軟總線式與插件式,不同方案具有不同的優劣勢,單一采用其中一種框架方案,一般難以滿足預期要求。這三種方案的優劣勢分別為:(1)組件式:優勢為靈活度較大,劣勢為組件內不可控,且二次開發難度較大,缺乏擴展性;(2)軟總線式:優勢為具有的擴展性與靈活度,劣勢為實現技術較為復雜,且對效率有直接影響;(3)插件式:優勢為便于維護,有良好的擴展性,劣勢為不同插件之間的互操作性較差[1]。
基于此,在設計中應做到取長補短,充分發揮多種框架方案的優勢,即形成CG.ADF方案,以組件式方案為基礎,采用插件機制,當插件載入至框架時再引入權限控制。以上過程均由框架自主完成,二次開發者無需添加其它代碼。
2.1 設計思想
新設計思想主要是對現有全部資源進行整合,為以后的二次開發提供統一、適用、可擴展、便于維護的接口。此外,還應為功能的擴展提供支持,使權限與GIS平臺均對開發人員完全透明。
2.2 框架設計
框架由數據層、訪問層、框架層及擴展層組成。其中,數據層主要包含三部分數據,分別為:(1)地圖數據庫,用于空間地理對象及其屬性信息的存儲;(2)權限數據庫,用于權限、用戶及角色等數據的存儲;(3)業務數據庫,用于對業務數據進行整合,并以空間數據關聯方面的需要為依據,結合業務數據類型,存儲和空間數據之間保持的相互關系。
訪問層和數據層之間直接對應,同樣包含三部分,按照服務方式實施運行,具有良好的獨立性:(1)GOS,即地理對象服務,對空間對象及其屬性信息進行查詢、修改和新加;(2)Authox,即權限服務,對權限方面的數據進行查詢、修改和新加;(3)Data Center,即業務數據總線服務端,對業務方面的數據進行查詢、修改和新加。
框架層,即CG.ADF,對訪問層所有接口進行了封裝,這使二次開發者無需再考慮訪問層存在哪些模塊。對于現有模塊,可由各團隊在相應的時期通過開發而成,這些模塊無論是接口命令,還是使用方式,均不相同。在對GOS進行訪問時,主要依靠的是COM組件X2Net;在對Authox進行訪問時,依靠的是COM組件AuthoxClient;在對Data Center進行訪問時,依靠的是C# DII。這種不同難免使開發者面臨一定困難,所以對框架層而言,應提供一致的接口[2]。
在框架層得到空間數據以后,借助Map控件對地理對象進行實時監視。控件一級采用MVC模式,已經屬于表現層。目前,傳統框架已經可以提供很多控件,同時在管理模塊中對這些控件予以使用,獲得良好效果。Map處在底層平臺,經封裝,和其它模塊建立了緊密的聯系,涉及控制與數據等方面的交互,此時均由框架完成這部分所有工作,極大的減輕了開發者工作強度。基于此,在全新的框架當中,依然會提供UI,對和平臺之間有直接關聯的接口實施封裝,為后續二次開發提供便利。
擴展層實際上是新開發出的插件,是一個和業務有著緊密關系的全新模塊。插件規范主要采用接口的方式,簡單可行、直接可靠。擴展層和訪問層之間的交互主要依靠ADF完成。
現有方案的問題在于權限的配置過程過于復雜,缺乏和用戶之間的友好性,主要表現在以下兩個方面:第一,配置時雖然存在先后次序,但沒有提示,僅可以通過對配置的標記才能對權限工具進行使用;第二,權限工具中具體功能方法名稱的輸入必須由手動完成,易產生錯誤,導致功能無法使用,而且這種錯誤往往是人在不經意情況下留下的,很難查出。針對第二個問題,可借助自動識別將所有名稱顯示到用戶界面,然后根據需要選取,不再需要手動輸入;針對第一個問題,應對權限的配置進行更改,根據正確的先后順序,顯示權限配置UI。這樣一來,既不用文字提示,也不用考慮具體的配置流程,系統可對流程自行定義,此時開發者僅需填寫必要信息[3]。
3 基于GIS應用程序開發框架設計實現
(1)菜單插件。先以CG.ADF.Plugin.Engine.Menu為基礎派生出所需菜單類;然后在構造函數當中采用對函數進行調用的方法設置所派生出的菜單的標題與名稱;最后對菜單項進行定義,菜單的標題與名稱均采用CG.ADF.Menu.Item.Attribute進行設置,在對菜單項當中的事件處理進行點擊以前,用于對處理方法的有效修飾[4]。
(2)工具條插件。先以CG.ADF.Plugin.Engine.ToolBar為基礎派生出所需工具條類;然后在構造函數當中采用對函數進行調用的方法設置所派生出的工具條類的標題與名稱;最后對不同工具按鈕項進行定義,工具條類的標題與名稱均采用CG.ADF.ToolBar.Item.Attribute進行設置。
(3)可停靠窗體插件。該插件的開發和以上插件有所不同,這是因為對窗體設計而言,它需滿足的功能要求十分復雜,很難通過抽象化處理得到可視化模塊,必須由二次開發者以業務要求為依據實施個性化、針對性的定制。此外,因C#語言無法實現類與類的多繼承,所以不能像其它插件那樣將數據部分定義在抽象基類。
根據上述原因,該插件類可將CG.ADF.Plugin.Engine作為基礎直接實現繼承。對開發者而言,應在對窗體進行設計時具備自主性,此時框架僅提供基礎數據支持。其開發過程總結如下:新建一個窗體;對IDockableWindow接口進行繼承與實現;由開發者完成個性化設計工作[5]。
(4)權限配置。①添加或刪除用戶及用戶組,并確定用戶和用戶組之間的相互關系。②對各類功能資源進行配置或創建,填寫具體的資源說明,并對資源組之間保持的關系進行設定。③創建或刪除權限,即(用戶組、資源組、功能組)三元關系的一個實例的添加與刪除。
4 結束語
以上設計方法與實現方式經過了實踐的驗證,說明采用以上設計、實現方法是切實可行的,具有良好的參考借鑒價值,能使二次開發具有良好的自主性與靈活性。
參考文獻:
[1] 張毅,李國卿,趙軍喜,孫慶輝.插件式GIS應用框架關鍵技術研究[J].測繪科學技術學報,2010,2704:298~301.
[2] 汶博,龍明,王青山,李曉剛.淺析Cairngorm框架在基于RIA網絡GIS中的應用[J].測繪科學,2010,3506:215~216+252.
[3] 王倩,陳懷民.基于Mapobjects組件式GIS導航系統開發[J].科學技術與工程,2007(5):757~760.
[4] 許巨平.基于ArcEngine插件式GIS應用框架的設計與實現[J].安徽地質,2011,2101:60~62+73.
[5] 聞平,王沖,楊林波,陳科,謝飛.基于插件技術的GIS應用框架關鍵技術研究[J].測繪通報,2012,S1:608~609+620.