999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OSGi的軍用指揮軟件插件機制研究

2019-06-13 10:57:32宋文婷趙建新高騰飛
火力與指揮控制 2019年5期
關鍵詞:定義程序機制

宋文婷,趙建新,艾 冰,高騰飛

(北方自動控制技術研究所,太原 030006)

0 引言

軍用指揮軟件在指揮信息系統中起著舉足輕重的作用。大型指揮軟件涉及到指揮業務、態勢感知、組織籌劃、情報偵察、綜合保障、網絡通信等方面[1],這些功能通常并行開發,再統一集成。.NET平臺自被微軟推出后,依靠其跨語言、跨平臺、提供面向對象開發支持的優勢,逐步取代了Win32 API在Windows桌面開發中的顯赫地位,成為未來大型軍用指揮軟件開發的重要平臺。

在.NET平臺傳統開發模式中,各功能模塊在集成時需部署在一起,缺乏模塊調用的統一機制,易造成依賴混亂;公用模塊重復開發,資源浪費;模塊間耦合度高,牽一發而動全身;系統可擴展性差,成為制約大型軍用指揮軟件團隊開發的瓶頸問題,急需設計在.NET平臺下支持并行開發、模塊間松耦合、組件重用性高、便于擴展的插件機制。

插件是可以獨立開發、部署的單元,可以動態地安裝到運行容器中,在不修改應用主體的情況下擴展原有系統的功能,而不對其產生影響。采用插件機制能夠快速分解和解決問題、實現應用功能、方便版本管理,能夠針對特定需求定制功能集合、簡化用戶界面、減少內存耗費,提高指揮軟件的易用性和高效性[2]。

.NET平臺上的插件機制,以微軟推行的解決方案為主[3],包括組件對象模型(COM)、動態鏈接庫(DLL)、MEF、MAF、SharpDevelop 等。COM 組件技術及DLL方式缺乏對插件的統一管理功能、插件間調用方式單一、軟件規模達到一定程度容易出現邏輯混亂,無法滿足大型指揮軟件系統的開發;MEF、MAF、SharpDevelop技術在插件動態加載方面不足,不支持“即插即用”。

本文采用OSGi(全稱:Open Service Gateway Initiative,開放服務網關規范)[4]規范在.NET平臺實現插件的加載與管控,將功能模塊設計為擁有獨立目錄結構、相互隔離、可以“即插即用”的指揮軟件插件,滿足大型軟件團隊并行開發、插件化調用、擴展方便的要求。

1 基本原理介紹

OSGi一方面指OSGi Alliance組織,另一方面指該組織制定的基于Java語言的服務規范——OSGi服務平臺。該平臺支持模塊化與插件化、具有熱插拔與動態特性、支持SOA、支持插件擴展、提供安全性等[6]。OSGi與現有插件技術對比見表1。

OSGi插件結構在形式上分獨立的宿主程序和多個互不相關的功能插件,各部分能夠共同形成一個邏輯上的完整系統[7]。宿主程序完成基本系統功能,可以加載多個不同的功能插件,接受插件提供的服務并提供給用戶,是整個插件系統的基礎和主干。功能插件能動態加載到插件系統中,提供相對單一的功能,多個插件使系統功能完善,完成許多復雜的處理,是插件系統的重要構成部分。

根據OSGi規范,插件結構如圖1所示,每個插件對應一個文件夾,由插件清單配置文件Manifest.xml和插件程序集組成。

程序數據流程大致為:運行啟動后,宿主程序遍歷插件目錄,將包含Manifest.xml的目錄識別為插件,根據該文件中信息(包括插件名稱、特征名稱、版本、初始狀態等)創建插件對象,設置該插件狀態為安裝狀態;當插件目錄下所有插件安裝完成后,宿主程序逐個解析插件間依賴關系;完成目錄下插件的解析后,加載Manifest.xml中指定的程序集啟動插件;如果沒有拋出異常,插件啟動成功,狀態變為活動狀態,插件被加載到程序中;當不需要運行某插件時,可以停止或卸載,狀態變為停止或已卸載狀態。

采用基于OSGi的插件機制開發軍用指揮軟件是把各大功能模塊劃分為不同插件,每個插件完成相對獨立的功能,各插件之間以及插件與宿主程序之間通過標準接口進行集成。有利于減輕軟件開發者負擔,增強軟件的可擴展性。

表1 現有插件技術與OSGi的對比

2 技術實現

2.1 OSGi插件化實現

采用OSGi插件機制,將插件分為宿主程序和功能插件[4]。宿主程序是功能插件運行的容器,提供環境初始化、宿主程序的啟動、注銷、功能插件注冊等功能;功能插件就是指揮軟件具體功能的實現。

插件化的實現原理如圖2所示,定義IBundle為公共接口類,負責提供獲取插件上下文、讀取插件Manifest.xml文件等初始化接口,以及啟動、停止,卸載、更新插件等插件操作類接口;定義IFrameWork繼承IBundle作為宿主程序接口類;此外,為宿主程序定義了4個接口:觸發事件接口IFrameworkFireEvent、服務接口IFrameworkService、監聽器接口 IFrameworkListener、安裝器接口IFrameworkInstaller。

圖2 插件接口類圖

宿主程序類Framework繼承并實現IFramework、IFramework Fire Event、IFramework Service、IFrameworkListener、IFrameworkInstaller接口;功能插件類Bundle實現IBundle接口,具體實現接口中申明的方法。

2.2 插件加載

插件加載是從本插件的類型空間加載需要的類型。插件運行所需的程序集并不位于同一目錄,通過設計類加載器,使其能夠從插件目錄中正確加載到插件程序集,采用顯式加載和隱式加載兩種。顯式加載通過Type.GetType方法支持;隱式加載則通過對 CLR Loader擴展來支持[3]。

2.2.1 顯式加載

插件可用的類型空間由本地程序集、子插件本地程序集、依賴的程序集和子插件依賴的程序集組成。這些信息配置在Manifest.xml文件中。加載的順序為:系統庫、本地Import(引用另一個插件共享的類型)、Import對應的Export信息(把本地程序集包含的類向其他插件暴露)、Require的 Bundle Dynamic Import(引用另一個插件定義的所有的Export暴露出來的所有類)。

顯示加載需要使用Type.GetType(name)方法。如果類型名稱沒有包含程序集全名,則從正在執行的程序集和mscorlib.dll加載類型;如果指定了程序集全名,則先加載程序集,在進行類的加載。

2.2.2 隱式加載

隱式類型加載用于解決插件間的靜態依賴,即一個插件在實現中直接引用了另一個插件的類的情況,通過CLR Loader觸發完成加載程序集、插件、資源和類型,為了使CLR能夠成功從依賴的插件加載到需要的類型,對CLR類加載器進行擴展,通過監聽AppDomain的AssemblyResolve事件,匹配各插件的程序集全名,加載所需的程序集:

2.3 插件擴展

插件采用引用服務、定義擴展點兩種方式實現擴展式設計。

1)引用服務,插件通過引用服務接口來獲取系統中的服務,完成現插件功能的擴展。即采用傳統的面向對象方式實現:引用定義服務的插件并實現對應接口,完成功能擴展。

2)定義擴展點[8],在 Manifest.xml文件中定義插件擴展信息,包括可擴展點和擴展點。可擴展點是指一個插件暴露給其他插件,可用于擴展的信息;擴展點則定義了插件對其他插件的擴展。擴展點結構如圖3所示。

圖3 擴展點結構

插件通過暴露擴展點提供給其他插件,實現新功能的添加。擴展點信息定義如圖4所示。被擴展插件和擴展插件通過擴展點建立關聯,擴展點通過ExtensionPoint節點定義并指定Point屬性(即擴展點名稱);擴展則通過Extension定義并指定Point屬性(即擴展點名稱),并在子節點定義擴展的信息。

插件擴展具有動態性[9],在插件啟動時暴露擴展點供其他插件使用,并通過GetExtension方法和ExtensionChanged事件獲取其他插件對該擴展點的所有擴展信息并監聽擴展信息的變更;在插件停止時從宿主程序中卸載,對其他插件并不造成影響,保證了插件間的松耦合。

2.4 插件通信

插件間通信采用兩種通信方式。一種是通過CLR完成,即直接通過引用類型來進行通信,用于與底層基礎插件通信;另一種是插件之間通過服務來實現交互[10-11],如圖5所示,插件以接口的形式定義契約(規定服務方法和數據類型),服務提供者插件對契約中約定的服務進行實現,將實現的服務對象注冊到服務總線上,服務消費者插件從服務總線上獲取需要的服務對象,進行調用。

圖4 擴展點描述

圖5 插件通信

2.5 開發平臺載入

本文基于Visual Studio的模板和向導程序來實現功能插件與編程平臺的緊密結合,為軟件開發者提供便捷的二次開發平臺,實現插件復用、提高軟件開發效率。

插件項目模板及向導程序用于創建自定義的項目[12-13],根據上文描述的功能插件整理出項目模板,其中包含項目所需的目錄和公共文件(如配置文件、資源文件)。

設計支持線性步驟系列的應用程序作為向導。向導中提供各個自定義參數值的輸入界面、處理啟動項目創建的事件,事件接收用戶啟動項目時所輸入的項目名稱,從.NET提供的IWizard接口中讀取replacementsDictionary作為系統參數。根據系統參數和自定義參數,基于項目模板向導快速生成各個項目。

3 應用實例

本文在.NET平臺上應用OSGi規范實現了軍用指揮軟件的插件機制,該機制已應用到某外貿合成旅指揮軟件的開發中。該軟件中軟件框架包括菜單、工具欄、按鈕和快捷鍵等[14],均采用上文所述插件機制集成,快速實現應用軟件的框架構建。

以軍用指揮軟件中輔助計算功能模塊為例:

通用模塊開發人員按照上文所述的插件設計方式完成該功能開發、測試,如下頁圖6(a)所示;

將功能模塊集成到VisualStudio開發工具中[15],如圖6(b)所示;

圖6 應用實例

在某外貿合成旅指揮軟件中需加載該功能,開發人員無需進行重復開發,采用Visual Studio中完成加載,在圖6(c)所示的向導中輸入自定義參數;

將輔助計算功能加載到指揮軟件中,效果如圖6(d)所示。

4 結論

本文在.NET平臺上借鑒OSGi規范設計了一種軍用指揮軟件的插件機制,為開發人員提供了簡單、易用的接口,降低了系統耦合性;制定了開發規范,有助于提高開發效率、并行性和靈活性,縮短開發周期。

猜你喜歡
定義程序機制
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
破除舊機制要分步推進
中國衛生(2015年9期)2015-11-10 03:11:12
注重機制的相互配合
中國衛生(2014年3期)2014-11-12 13:18:12
打基礎 抓機制 顯成效
中國火炬(2014年4期)2014-07-24 14:22:19
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 中文字幕在线看| 国产免费黄| 一本大道东京热无码av| 欧美成人精品一级在线观看| 国产永久在线视频| 国产a在视频线精品视频下载| 欧美日韩国产在线播放| 亚洲熟妇AV日韩熟妇在线| 午夜激情福利视频| 再看日本中文字幕在线观看| 波多野结衣久久精品| 久久亚洲日本不卡一区二区| 日韩无码视频专区| 日韩精品少妇无码受不了| 亚洲IV视频免费在线光看| 欧美日一级片| 99精品一区二区免费视频| 亚洲欧美不卡视频| AV网站中文| 亚洲综合精品第一页| 91口爆吞精国产对白第三集| av大片在线无码免费| 国产激情影院| 中文字幕有乳无码| 亚洲精品va| 国产真实自在自线免费精品| 国产www网站| 四虎国产精品永久在线网址| 久久久久九九精品影院| 五月婷婷欧美| 在线观看免费AV网| 中国丰满人妻无码束缚啪啪| 成年A级毛片| 国产69囗曝护士吞精在线视频| 亚洲乱码在线视频| 2021最新国产精品网站| 丰满少妇αⅴ无码区| av在线5g无码天天| 久久综合九九亚洲一区 | 亚洲一级毛片在线观| 波多野结衣一区二区三区88| 99久久精品国产麻豆婷婷| 丁香五月激情图片| 91久久夜色精品国产网站| 欧美国产在线看| 99视频在线免费观看| 国产亚洲日韩av在线| 久久一本日韩精品中文字幕屁孩| 国内精品久久久久久久久久影视| 青青草国产一区二区三区| 国产精品欧美在线观看| 国产福利一区视频| 毛片基地视频| 特级aaaaaaaaa毛片免费视频| 97色婷婷成人综合在线观看| 欧美日韩成人| 青青青国产在线播放| 国产成熟女人性满足视频| 在线免费不卡视频| 亚洲成综合人影院在院播放| 免费国产福利| 国产a网站| 欧美日韩国产在线观看一区二区三区| 免费一极毛片| 九九视频在线免费观看| 亚洲精品中文字幕午夜| 免费一级毛片在线观看| 国产超碰在线观看| 国产激情第一页| 午夜激情婷婷| 国产拍在线| 国产二级毛片| 国产va在线观看免费| 亚洲av无码人妻| 免费人欧美成又黄又爽的视频| 亚洲色图欧美一区| 亚洲欧美国产视频| 日本福利视频网站| 久久综合伊人 六十路| 国产99久久亚洲综合精品西瓜tv| 国产96在线 | 在线国产三级|