何興富,李響
(重慶市勘測院,重慶 400020)
反射機制在構建松散GIS系統(tǒng)框架中的應用
何興富?,李響
(重慶市勘測院,重慶 400020)
GIS應用系統(tǒng)在城市建設和管理中扮演著越來越重要的角色,成為數字城市的核心。在系統(tǒng)開發(fā)過程中,如何提高軟件的復用性和擴展性,縮短開發(fā)周期,快速構建面向專業(yè)應用的GIS系統(tǒng),是一個迫切需要解決的問題。本文嘗試引入.Net框架中的反射機制,通過構建一個松散的GIS基礎框架,為應用系統(tǒng)的開發(fā)提供靈活的系統(tǒng)配置和有效的數據解耦。然后在該框架上開發(fā)一個三維規(guī)劃管理系統(tǒng)原型,展現引入反射機制用于快速構建系統(tǒng)的可行性和靈活性,為GIS應用系統(tǒng)快速開發(fā)探求一種新的途徑。
反射機制;GIS;城市規(guī)劃;軟件復用
隨著城市建設進程的加快,地理信息系統(tǒng)(GIS)越來越多地被用到城市建設和管理的方方面面。城市GIS成了“數字城市”的核心部分,將政府、企業(yè)和社會聯結成一個整體,是實現資源共享的基礎[1]。隨著數字城市這一概念的出現和技術的發(fā)展,越來越多的城市管理和決策依靠先進的科學技術手段。城市規(guī)劃是城市管理的一個重要內容,GIS在城市規(guī)劃選址、路網設計、管網布設、規(guī)劃管理等方面已經大量應用。
GIS的核心是數據,是各種分析功能的基礎。依國家和行業(yè)等一系列標準建立的基礎地理信息元數據,使這些基礎數據能在各系統(tǒng)之間實現共享。但是,目前面向各行業(yè)應用的專業(yè)GIS應用系統(tǒng)仍然是面向特定服務,根據用戶需求構建系統(tǒng)。這些GIS系統(tǒng)缺乏靈活性,當用戶需求發(fā)生改變,往往需要修改系統(tǒng)框架,甚至重新設計,造成代碼質量控制困難,開發(fā)進程控制困難,代碼重用率低等問題。
本文嘗試將Web開發(fā)中常用的反射機制引入GIS應用的開發(fā),擬實現一個松散的GIS基礎框架,實現較好的代碼重用和靈活的功能配置、用戶管理。并在該GIS基礎框架之上,實現一個三維規(guī)劃管理系統(tǒng)的原型,以驗證反射機制在提高軟件復用性和擴展性上的優(yōu)勢。
反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力。這一概念的提出很快引發(fā)了計算機科學領域關于應用反射性的研究。它首先被程序語言的設計領域所采用,并在Lisp和面向對象方面取得了成績[2]。
在計算機科學領域,反射是指一類應用,它們能夠自描述和自控制。這類應用通過采用某種機制來實現對自己行為的描述(Self-Representation)和監(jiān)測(Examination),并能根據自身行為的狀態(tài)和結果,調整或修改應用所描述行為的狀態(tài)和相關的語義。實現了反射機制的系統(tǒng)都具有開放性。一般來說,反射系統(tǒng)除了滿足開放性條件外還必須滿足原因連接(Causally-Connected)。原因連接是指對反射系統(tǒng)自描述的改變能夠立即反映到系統(tǒng)底層的實際狀態(tài)和行為上的情況,反之亦然。開放性和原因連接是反射系統(tǒng)的兩大基本要素[3]。
在.NET中,反射是一種強大的工具。它使您能夠創(chuàng)建靈活的代碼,這些代碼可以在運行時裝配,無需在組件之間進行源代碼鏈接。反射允許我們在編寫與執(zhí)行時,使我們的程序代碼能夠接入裝載到可執(zhí)行程序中的類的內部信息,而不是源代碼中選定的類協作的代碼。這使反射成為構建靈活的應用的主要工具。反射通常具有以下用途[4]:
(1)定義和加載程序集,加載在程序集清單中列出的模塊以及從此程序集中查找類型并創(chuàng)建該類型的實例;
(2)了解包含模塊的程序集以及模塊中的類等;
(3)了解構造函數的名稱、參數、訪問修飾符等;
(4)了解方法的名稱、返回類型、參數、訪問修飾符等;
(5)了解字段的名稱、訪問修飾符,并獲取或設置字段值;
(6)了解事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等,并添加或移除事件處理程序;
(7)了解屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態(tài)等,并獲取或設置屬性值;
(8)獲取參數的名稱、數據類型、參數是輸入參數還是輸出參數以及參數在方法簽名中的位置等。
應用程序與外部程序集之間的關系如圖1所示。
圖1 GIS基礎框架結構圖
通過反射的這些特性,就可以在系統(tǒng)運行過程中,動態(tài)地加載位于應用程序集中的類型,解析它的結構,提取類型中的方法并進行調用。如果通過一些接口約定,應用程序無需知道類型的具體實現細節(jié),而是將類型實例化為接口的一個實例。同時,由于應用程序知道接口的詳細信息,則相當于實現了對類型的透明調用。本文的設計正是基于反射的這些特性進行。
GIS的核心內容是數據,數據訪問和數據表現是GIS系統(tǒng)的重要組成部分。在與數據相關的應用程序中,最常用的結構為模型-視圖-控制器三層結構模式,本文設計的框架仍然采用該模式。在模型端,數據源的格式對于應用系統(tǒng)來說是透明的。但作為一個應用框架,系統(tǒng)實現了基本的數據訪問接口,因此框架可以支持SHP、DWG、DXF等常見的GIS數據格式。在視圖端,采用基于Windows窗體的用戶界面,由工具欄、二/三維數據表現窗口、狀態(tài)和控制欄、圖層控制窗口等部分組成。在控制端,對應于框架的業(yè)務邏輯層,它負責提供數據的輸入輸出和業(yè)務邏輯的實現。框架實現了比較基礎的GIS功能,包括漫游、定位、選擇查詢、測量及基礎空間分析等?;A框架的結構如圖2所示。
圖2 GIS基礎框架結構圖
GIS基礎框架在基礎GIS引擎之上建立于一個松散的結構,它更多的是管理界面和提供接口,其組成包括以下幾個部分:
(1)基礎GIS引擎:框架的基礎,GIS數據表現的核心;
(2)系統(tǒng)配置模塊:控制系統(tǒng)啟動流程,加載并保存配置信息,根據配置信息設置系統(tǒng)的界面及各項參數,負責更改和保存系統(tǒng)配置信息;
(3)數據訪問模塊:提供基本的GIS數據訪問,包括SHP、DXF等,并且以工廠模式設計一系列訪問接口,供子系統(tǒng)實現;
(4)界面管理模塊:根據系統(tǒng)初始化參數等信息實現界面的管理,包括窗口狀態(tài)、場景控制等,管理系統(tǒng)中的元素,如菜單、子窗口等;
(5)角色控制模塊:提供功能級的角色控制,對系統(tǒng)加載的功能進行角色編碼匹配,以確定功能的可用性,由界面管理模塊控制功能菜單的可見性。
(6)輔助模塊:提供基礎函數、文件訪問、數學函數、日志輸出等;
(7)基礎接口:定義工具ITool、命令ICommand等的接口,作為基礎框架的功能約束。子系統(tǒng)的功能必須繼承自這些接口,使之能被基礎框架識別,并使用中介類作為功能的初始化參數。
(8)反射訪問模塊:框架的核心部分和松散結構的基礎。提供訪問框架外應用程序集中的類型信息,如果類型實現自基礎接口,則可以創(chuàng)建它的一個實例作為功能加載到程序中,并創(chuàng)建該功能的菜單項供用戶調用;
(9)中介模塊:提供一個中介類,保存當前系統(tǒng)狀態(tài)、用戶狀態(tài)、功能狀態(tài)等信息,并作為各模塊間傳遞參數的中介。此外,由于框架建立于一種松散結構,各應用模塊間在沒有鏈接的情況下,無法互相訪問,因此它們的通信也由中介模塊提供的事件消息來實現。
(10)公共設置接口:當在基礎框架上構建GIS應用時,需要改變基礎框架的一些基礎設置,如應用的標題、圖標、關于信息等;
其啟動流程如圖3所示。
圖3 基礎框架啟動流程
在基礎框架上進一步封裝,則可以生成面向不同應用的專業(yè)GIS系統(tǒng)。本文以構建一個規(guī)劃管理系統(tǒng)為例進行說明,展現反射機制在專業(yè)GIS系統(tǒng)開發(fā)過程中帶來的靈活性。
作為一個系統(tǒng)原型,本文實現了規(guī)劃管理中常用的幾個功能:規(guī)劃圖層管理、用地類型統(tǒng)計、地塊的土地性質分析、建筑陰影分析、控高分析等。在基礎框架中約定,規(guī)劃系統(tǒng)中的各項功能須繼承自基礎接口。其中,圖層管理等繼承自ICommand,控制規(guī)劃圖層的開與關;分析功能繼承自ITool,提供功能與用戶的交互操作。這些功能作為插件的模式,被基礎框架的檢索機制發(fā)現后,動態(tài)配置到系統(tǒng)菜單中,供用戶調用。作為角色控制的一部分,這些功能在進入系統(tǒng)前需要進行配置,以提供諸如菜單路徑、權限等級等相關信息。規(guī)劃管理系統(tǒng)結構如圖4所示。
圖4 基于GIS基礎框架的規(guī)劃管理系統(tǒng)結構示意圖
規(guī)劃管理系統(tǒng)構建于GIS基礎框架之上,其中的功能類繼承自基礎接口,并使用中介類獲取基礎框架提供的各項參數以及與系統(tǒng)框架中的子模塊使用事件消息機制通信。由于規(guī)劃管理系統(tǒng)本身需要訪問其專業(yè)數據,如果基礎框架不能提供特定類型數據訪問的實現,那么它需要繼承數據訪問模塊中的工廠類,以實現其數據的存取。在實現功能模塊后,需要對基礎框架進行一些設置,可以通過公共設置接口來實現。規(guī)劃管理系統(tǒng)需要的一些參數可以通過配置基礎框架的配置文件來提供,在該配置文件中除保存系統(tǒng)參數外,還保存了一個基于“鍵—值”對的參數列表。最后,規(guī)劃管理系統(tǒng)調用基礎框架的啟動函數,啟動系統(tǒng)。系統(tǒng)運行界面如圖5所示。
圖5 規(guī)劃管理系統(tǒng)原型運行界面
基于反射機制的GIS基礎框架大大增加了GIS應用系統(tǒng)開發(fā)的靈活性,通過XML配置應用程序的各項參數,在系統(tǒng)啟動時加載到配置表中,達到了類似于Web開發(fā)中的反射注入。此外,由于各功能模塊與系統(tǒng)框架之間沒有鏈接編譯,各功能相關性大為降低,實現了軟件結構的松散組合。系統(tǒng)框架只提供基礎的GIS功能,并且可以通過修改公共設置接口來控制這些功能的顯示與否。當需要在GIS基礎框架上開發(fā)專業(yè)GIS應用時,只需要繼承自基礎接口,開發(fā)工具并生成相應的應用程序集(可執(zhí)行文件或動態(tài)鏈接庫)。通過對這些應用程序集進行配置,可以進一步控制它們在基礎框架中的狀態(tài)(例如相對于當前用戶,某項功能是否可用),從而實現在運行階段而不是編譯階段動態(tài)配置系統(tǒng)的目的。通過反射機制,GIS基礎框架并不需要與這些具體功能的應用程序集編譯連接,而是運行時由反射訪問模塊通過反射的方式獲取具體功能的實例,由系統(tǒng)進行調用。
現如今,GIS應用系統(tǒng)大量服務于數字城市建設的各個層面,在得到開發(fā)任務后,如何快速構建出面向專業(yè)應用的專業(yè)GIS應用系統(tǒng),而不是每次都針對不同的應用去構建不同的基礎框架。反射機制為這個構想提供了一種解決方案,它大大提高了軟件的復用性和擴展性,讓開發(fā)者可以專注于專業(yè)應用,提高基礎代碼的重用效率,從而達到快速開發(fā)的目的。
[1] Esri中國(北京)有限公司.基于網格化管理的數字化城市管理信息系統(tǒng)ArcGIS解決方案[D].p3
[2] 百度百科.反射機制[L].http://baike.baidu.com/view/ 3454964.htm
[3] 趙利宏,李秀冰,李大林.基于反射機制的插件系統(tǒng)軟件設計[J].計算機工程與設計,2010.2(2),P349
[4] MSDN.反射概述[D].ms-h(huán)elp://MS.MSDNQTR.v80.chs /MS.VisualStudio.v80.chs/dv_fxadvance/html/d1a58e7ffb39-4d50-bf84-e3b8f9bf9775.htm
The Application of Reflection Mechanism for Creating Loose GIS System Framework
He XingFu,Li Xiang
(Chongqing Survey Instituted,Chongqing 400020,China)
GIS application System now plays more and more important role in city construction and management,and becomes the core of digital city.How to improve the reusability and expansibility of software,shorten development periods,and create GIS system for spatial application quickly in system development process,it′s an issue that needed to be resolved imminently.This paper introduces the reflection mechanism provided by.Net frameworks,try to supply flexible system config and effective data unbinding for application system by creating a loose GIS system framework.And develops a 3D planning management system prototype,exhibits the feasibility and flexible in system quick development by using reflection mechanism,explores a quick way for developing GIS application system.
reflection mechanism;GIS;city planning;software reusability
1672-8262(2011)02-49-04
P208
B
2010—08—09
何興富(1982—),男,工程師,主要研究方向為GIS應用系統(tǒng)開發(fā)。