基于.NET 平臺(tái)的插件式 GIS 研究

李云錦,周芹,黃躍峰,何亞鑫

(1 中國(guó)科學(xué)院地理科學(xué)與資源研究所,北京 100101;2 中國(guó)科學(xué)院研究生院,北京 100039; 3 北京超圖地理信息技術(shù)公司,北京 100101 )

論文來源:中國(guó)地理信息系統(tǒng)協(xié)會(huì)第四次會(huì)員代表大會(huì)暨第十一屆年會(huì)論文集

摘要:插件模式的應(yīng)用可以提高軟件的擴(kuò)展性、復(fù)用性與可裁剪性?,F(xiàn)今許多 GIS 軟件都應(yīng)用了插件模式,但插件實(shí)現(xiàn)大多是基于 DLL 技術(shù)的,其擴(kuò)展性與易用性都不如基于.NET或 Java 平臺(tái)的實(shí)現(xiàn)。本文將對(duì)插件模式及其相關(guān)技術(shù)進(jìn)行探討并提出基于.NET 平臺(tái)的插件實(shí)現(xiàn)的解決方案。與傳統(tǒng)…

關(guān)鍵詞: 地理信息系統(tǒng);插件;架構(gòu)

1 引言

隨著 GIS 的不斷發(fā)展,其應(yīng)用領(lǐng)域已逐漸從傳統(tǒng)的電子政務(wù)過渡到企業(yè)應(yīng)用以及大眾化地理信息服務(wù),GIS 的應(yīng)用需求呈現(xiàn)出多樣性與不確定性。與日俱增的 GIS 應(yīng)用需求對(duì) GIS軟件的擴(kuò)展性、復(fù)用性及可裁剪性提出了更高的要求。

擴(kuò)展即增加新的功能而不修改已有產(chǎn)品。傳統(tǒng)的 GIS 軟件一經(jīng)發(fā)布,如需添加新的功能即必須修改源代碼并重新發(fā)布產(chǎn)品,成本高、效率低。而今許多應(yīng)用需求在 GIS 軟件開發(fā)時(shí)是未知的,有些需求雖然已經(jīng)明確,但 GIS 軟件廠商只能有選擇地滿足部分需求。因此,為了滿足更多的應(yīng)用需求,GIS 軟件迫切需要提供一種便捷的開發(fā)方式,即在產(chǎn)品發(fā)布之后用戶能根據(jù)自己的需求開發(fā)相應(yīng)的功能模塊,并能集成至已有的產(chǎn)品中。

復(fù)用通常指代碼的重用。面向?qū)ο?、組件與 WebService 等技術(shù)的應(yīng)用都是提高軟件復(fù)用性的方式。組件式 GIS 在很大程度上提高了 GIS 軟件的復(fù)用率,但基于組件的 GIS 開發(fā),用戶仍需要編寫大量重復(fù)代碼,例如每個(gè)用戶都必須編寫地圖的顯示、編輯功能,而這些功能的實(shí)現(xiàn)都已經(jīng)包括在 GIS 桌面產(chǎn)品中。此外,復(fù)用也可指軟件開發(fā)相關(guān)資源的重用,例如符號(hào)庫(kù)、風(fēng)格庫(kù)、界面庫(kù)、圖標(biāo)等資源。界面的開發(fā)在實(shí)際的項(xiàng)目開發(fā)中占較大的比重,簡(jiǎn)潔易用的界面會(huì)帶來更好的客戶滿意度,GIS 開發(fā)人員因此需要花費(fèi)大量時(shí)間在界面的設(shè)計(jì)上,而 GIS 桌面產(chǎn)品穩(wěn)定而大眾化的界面沒有得到重用。

裁剪即根據(jù)用戶需要保留軟件中感興趣的功能。對(duì) GIS 用戶而言,用戶常用的功能只是產(chǎn)品功能的一個(gè)子集,有些基本不使用的功能對(duì)系統(tǒng)資源的占用無(wú)疑是種浪費(fèi)。如果用戶能通過簡(jiǎn)單的配置禁用某些不常使用的功能,不僅能節(jié)約系統(tǒng)資源,還能提高程序的啟動(dòng)速度;對(duì) GIS 軟件廠商而言,他們需要根據(jù)不同的用戶提供不同的版本,這有利于產(chǎn)品的市場(chǎng)推廣與銷售。在傳統(tǒng) GIS 開發(fā)模式中,軟件裁剪需要開發(fā)人員修改源代碼,并對(duì)各個(gè)版本實(shí)施不同的版本策略,很難做到軟件的定制。

插件模式提供了一種開放的開發(fā)方式,能較好地解決上述問題。目前一些 GIS 軟件也應(yīng)用了插件模式,如 SuperMap Deskpro5.2、ArcMap9.2、MapGIS7.0 等,但插件實(shí)現(xiàn)都是基于DLL 技術(shù)或 COM 技術(shù)的,而 DLL 技術(shù)與 COM 技術(shù)自身存在較多問題,例如“DLL Hell”問題、平臺(tái)依賴性以及模塊中所定義的類無(wú)法被繼承等。再者,目前的擴(kuò)展也僅限于對(duì)菜單、工具欄的擴(kuò)展,并不支持用戶的二次擴(kuò)展。比較而言,基于.NET 與 Java 平臺(tái)的插件實(shí)現(xiàn)在易用性、安全性、二次擴(kuò)展能力方面都優(yōu)于基于 DLL 或 COM 的實(shí)現(xiàn)方式。本文將首先介紹插件的基本概念及應(yīng)用現(xiàn)狀,并對(duì)常用的插件的解決方案進(jìn)行比較分析,然后詳細(xì)介紹基于.NET 平臺(tái)的插件實(shí)現(xiàn),在此基礎(chǔ)上提出插件式 GIS 架構(gòu),并依據(jù)此架構(gòu)實(shí)現(xiàn) SuperMap6.0 桌面原型。

2 插件模式

GIS 桌面軟件通常需要支持不同格式的數(shù)據(jù),然而它無(wú)法支持所有格式的數(shù)據(jù),有些用戶特有的數(shù)據(jù)格式無(wú)法用現(xiàn)有的 GIS 軟件讀取與顯示。那么如何在 GIS 桌面軟件中使用該類數(shù)據(jù)呢?應(yīng)用插件模式是解決此類問題的有效途徑之一。

插件模式通過在運(yùn)行時(shí)動(dòng)態(tài)加載編譯時(shí)未知的程序模塊以擴(kuò)展現(xiàn)有程序,它常被用于滿足以下需求:(1)支持對(duì)功能的擴(kuò)展;(2)將系統(tǒng)模塊化以降低系統(tǒng)的復(fù)雜度;(3)簡(jiǎn)化軟件部署與更新;(4)獲得高的啟動(dòng)速率;(5)減少系統(tǒng)資源的占用。

現(xiàn)今許多軟件都應(yīng)用了插件模式。例如 Internet Explore、Netscape、Fireforx、Mozilla等瀏覽器都應(yīng)用了插件模式,以支持不同格式的數(shù)據(jù)的顯示;絕大多數(shù)集成開發(fā)環(huán)境也應(yīng)用了插件模式,例如 Eclipse、NetBeans、Visual Studio 2005 等;許多應(yīng)用軟件也應(yīng)用了插件模式,例如 Microsoft Office、Adobe Photoshop 等。雖然這些軟件都應(yīng)用了插件模式,但具體實(shí)現(xiàn)不盡相同。例如 Mozilla 通過 XUL 語(yǔ)言聲明接口,并利用 JavaScript 和 XPCOM 定義 UI 元素的動(dòng)態(tài)行為;Eclipse 則通過“接口繼承+XML 描述”來實(shí)現(xiàn)。盡管這些軟件的插件實(shí)現(xiàn)方式不同,但其基本原理大致相同。

更多內(nèi)容請(qǐng)查看pdf