两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于工具集的桌面端插件框架及實(shí)現(xiàn)方法與流程

文檔序號(hào):11917550閱讀:267來(lái)源:國(guó)知局
一種基于工具集的桌面端插件框架及實(shí)現(xiàn)方法與流程

本發(fā)明涉及桌面客戶端的工具插件的開(kāi)發(fā)方法,特別是涉及一種基于工具集的桌面端插件框架及實(shí)現(xiàn)方法,開(kāi)發(fā)者在該模式下遵循插件開(kāi)發(fā)規(guī)范,基于開(kāi)發(fā)環(huán)境提供的基礎(chǔ)二次開(kāi)發(fā)庫(kù),即可快速擴(kuò)展所需桌面端工具插件,并發(fā)布為通用的云服務(wù)。



背景技術(shù):

云計(jì)算是虛擬化、效用計(jì)算、基礎(chǔ)設(shè)施即服務(wù)、平臺(tái)即服務(wù)、軟件即服務(wù)等概念混合演進(jìn)及躍升的結(jié)果,云計(jì)算時(shí)代是必然趨勢(shì),“云服務(wù)”作為一種新興的共享基礎(chǔ)架構(gòu)的方法已經(jīng)越來(lái)越廣泛的應(yīng)用于信息領(lǐng)域。云計(jì)算技術(shù)將連接到互聯(lián)網(wǎng)的PC、數(shù)據(jù)庫(kù)、服務(wù)器、甚至包括昂貴的科學(xué)儀器連接到一起,并將空閑計(jì)算能力、存儲(chǔ)空間等利用起來(lái)。用戶通過(guò)互聯(lián)網(wǎng)訪問(wèn)云計(jì)算平臺(tái)獲得需要的信息服務(wù),而不必考慮提供這些信息服務(wù)的具體的硬件設(shè)施、操作系統(tǒng)等支持環(huán)境,從而實(shí)現(xiàn)了廣泛的多源異構(gòu)信息資源的充分共享。隨著云計(jì)算理念的提出及深化,軟件應(yīng)用終端向著微型化、移動(dòng)化方向發(fā)展,同時(shí)服務(wù)器端向著基于跨平臺(tái)的、面向服務(wù)的產(chǎn)品體系及架構(gòu)并支持小型機(jī)、大型機(jī)、集群等應(yīng)用的巨型化方向發(fā)展。

傳統(tǒng)的軟件開(kāi)發(fā)模式偏向于定制開(kāi)發(fā),功能設(shè)計(jì)與應(yīng)用對(duì)象一一對(duì)應(yīng)。開(kāi)發(fā)的應(yīng)用只為滿足某一特定對(duì)象的使用,不具備通用性,耦合性很強(qiáng)。功能之間并未相互獨(dú)立,代碼冗余,復(fù)用率也不高。對(duì)當(dāng)新應(yīng)用與舊應(yīng)用有一定的相似度時(shí),最常采用的方法就是基于已有應(yīng)用進(jìn)行修改,或者直接將代碼拷貝、調(diào)試、修改,由此帶來(lái)了應(yīng)用工程越來(lái)越大、Bug越來(lái)越多、軟件開(kāi)發(fā)效率極度低下,開(kāi)發(fā)出的軟件往往存在很多不可預(yù)見(jiàn)的問(wèn)題。因此,在傳統(tǒng)軟件開(kāi)發(fā)應(yīng)用中,體現(xiàn)了傳統(tǒng)開(kāi)發(fā)模式下存在開(kāi)發(fā)復(fù)雜、耦合性強(qiáng)、復(fù)用性差、成本高、效率低等問(wèn)題。



技術(shù)實(shí)現(xiàn)要素:

為解決上述問(wèn)題,本發(fā)明提供了一種基于工具集的桌面端插件框架及實(shí)現(xiàn)方法,本發(fā)明采用的“框架+插件”的開(kāi)發(fā)模式具有開(kāi)發(fā)簡(jiǎn)易、低耦合、高復(fù)用、高效率等特性。

為實(shí)現(xiàn)以上發(fā)明目的,本發(fā)明一種基于工具集的桌面端插件框架,其不同之處在于:其包括以下模塊:

宿主程序模塊:宿主程序是整個(gè)插件開(kāi)發(fā)框架運(yùn)行的入口,它通過(guò)插件引擎加載插件對(duì)象,并將插件對(duì)象以用戶界面(UI)的形式來(lái)展示,以及負(fù)責(zé)協(xié)調(diào)這些插件對(duì)象與界面控件間的交互;

第三方界面庫(kù)模塊(Dxp):第三方界面庫(kù)提供界面控件對(duì)象,被宿主程序調(diào)用來(lái)實(shí)現(xiàn)與插件對(duì)象間的交互;

插件引擎模塊:插件引擎負(fù)責(zé)解析插件程序集,提取插件程序集中的插件類型信息,并提交給宿主程序生成對(duì)應(yīng)的界面對(duì)象;插件引擎提供一種通訊契約,即插件接口;插件程序集如果實(shí)現(xiàn)了上述插件接口,就能被插件引擎認(rèn)可為合格的插件;插件引擎提供一個(gè)插件容器(PluginContainer),負(fù)責(zé)管理插件的加載、卸載狀態(tài)控制;插件引擎提供一個(gè)運(yùn)行框架(Application),負(fù)責(zé)管理插件引擎運(yùn)行狀態(tài)、與插件程序集間的交互以及與地圖數(shù)據(jù)(MapDocument)交互。

所述插件容器(PluginContainer)通過(guò)從插件程序集(Plugin….dll)中獲取插件對(duì)象,分別裝入對(duì)應(yīng)的插件容器(PluginContainer)中,實(shí)現(xiàn)插件的加載;從插件容器(PluginContainer)中刪除插件對(duì)象,實(shí)現(xiàn)插件的卸載;

插件程序集模塊:實(shí)現(xiàn)了插件引擎定義的插件契約的應(yīng)用程序集,是基于.NET框架的應(yīng)用功能的主體實(shí)現(xiàn)。

以上方案中,所述宿主程序模塊負(fù)責(zé)了界面的解析、加載、運(yùn)行、保存過(guò)程,其啟動(dòng)過(guò)程必須滿足用戶的配置性和嵌入性需求,宿主程序的啟動(dòng)、關(guān)閉過(guò)程大概分為如下幾個(gè)步驟:

步驟301:加載內(nèi)部Application.xml文件,根據(jù)XML初始化系統(tǒng)屬性,并且加載歡迎屏(如果存在歡迎屏則加載,否則不加載);

步驟302: 判斷是否存在配置文件(exe.config文件),如果不存在,則將Application.xml的內(nèi)容賦值給新文檔RealDoc,否則將配置文件exe.config的內(nèi)容賦值給新文檔RealDoc;

步驟303:根據(jù)新文檔來(lái)修訂系統(tǒng)屬性、創(chuàng)建插件對(duì)象、創(chuàng)建界面、發(fā)送事件;

步驟304:宿主程序啟動(dòng)完成(如果前面加載了歡迎屏,關(guān)閉歡迎屏);

步驟305:宿主程序關(guān)閉,宿主程序需要保存用戶界面以備下次啟動(dòng)應(yīng)用程序,它將會(huì)保存用戶當(dāng)前的所有設(shè)置,待下次啟動(dòng)時(shí)則根據(jù)配置文件初始化為上次保存的界面。

上述方案中,插件的加載包括以下步驟:

步驟501:插件容器(PluginContainer)加載插件程序集(Plugin….dll)。若之前未加載插件,則將插件程序集(Plugin….dll)插入到插件程序集列表末尾;

步驟502:插件容器(PluginContainer)創(chuàng)建所有實(shí)現(xiàn)了IPlugin接口的對(duì)象,并將每個(gè)對(duì)象添加到相應(yīng)的插件詞典中;

步驟503:宿主程序(Apploader.exe)處理PluginAdded事件來(lái)創(chuàng)建界面并發(fā)送PluginLoadedEvent事件 。

上述方案中,所述插件的卸載包括以下步驟:

步驟601:插件容器(PluginContainer)卸載插件程序集(Plugin….dll),若插件未卸載,則將插件程序集(Plugin….dll)從插件程序集列表中移除;

步驟602:刪除插件容器(PluginContainer)中所有實(shí)現(xiàn)了IPlugin接口的對(duì)象,并將每個(gè)對(duì)象從相應(yīng)的插件詞典中移除;

步驟603:宿主程序處理PluginRemoved事件來(lái)刪除界面并發(fā)送PluginUnLoadedEvent事件。

一種基于工具集的桌面端插件框架的實(shí)現(xiàn)方法,其包括以下步驟:

步驟1):配置開(kāi)發(fā)環(huán)境。將開(kāi)發(fā)所需的集成開(kāi)發(fā)環(huán)境、開(kāi)發(fā)者授權(quán)許可文件、開(kāi)發(fā)框架文件等下載到PC端,實(shí)現(xiàn)一鍵部署;

步驟2):開(kāi)發(fā)/調(diào)試:在遵循插件契約的前提下,用戶按照接口說(shuō)明在配置好的開(kāi)發(fā)環(huán)境中調(diào)用已有的插件,實(shí)現(xiàn)插件接口,并按照用戶的個(gè)性需求編寫(xiě)相應(yīng)的代碼完成整個(gè)插件的開(kāi)發(fā),生成一個(gè)合格的插件;

步驟3):測(cè)試:開(kāi)發(fā)者進(jìn)行插件測(cè)試并按照進(jìn)行測(cè)試結(jié)果的填寫(xiě),插件測(cè)試通過(guò)后進(jìn)入下一步驟;

步驟4):發(fā)布:測(cè)試通過(guò)的插件,發(fā)布在插件程序集中,供插件容器加載、運(yùn)行;

步驟5):提交:插件引擎提取插件程序集中的插件類型信息,并提交給宿主程序生成對(duì)應(yīng)的界面對(duì)象。

對(duì)比現(xiàn)有技術(shù),本發(fā)明的有益特點(diǎn)如下:

本發(fā)明采用的“框架+插件”的開(kāi)發(fā)模式具有開(kāi)發(fā)簡(jiǎn)易、低耦合、高復(fù)用、高效率、通用性高、易遷移、易聚合等特性。

本發(fā)明開(kāi)發(fā)出來(lái)的工具插件具有任意縱生、自由聚合、遷移方便、易于重構(gòu)等特點(diǎn),全面滿足軟件開(kāi)發(fā)者對(duì)云環(huán)境下軟件開(kāi)發(fā)的新需求。

附圖說(shuō)明

圖1為基于工具集的桌面端插件開(kāi)發(fā)模式;

圖2為桌面端插件的開(kāi)發(fā)中間件示意圖;

圖3為桌面端插件的開(kāi)發(fā)步驟圖

圖4為宿主程序啟動(dòng)、關(guān)閉的流程圖;

圖5為插件的動(dòng)態(tài)加載實(shí)現(xiàn)原理;

圖6為插件的加載步驟;

圖7為插件的卸載步驟,插件的卸載與加載相反;

圖8為插件運(yùn)行框架。

具體實(shí)施方式

下面通過(guò)具體實(shí)施方式結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。

工具框架又稱插件框架等,讀者可以簡(jiǎn)單理解為在開(kāi)發(fā)GIS桌面應(yīng)用時(shí),MapGIS已從一開(kāi)始就為開(kāi)發(fā)者準(zhǔn)備好了這一框架,剩下的工作即是基于預(yù)置的工具插件往該框架里添加插件即可,即“框架+插件”開(kāi)發(fā)模式。

工具插件,是一種基于.NET Framework框架,并遵循目標(biāo)框架通訊契約(純接口定義)的應(yīng)用程序集,其在操作系統(tǒng)里表現(xiàn)為“.dll文件”。

工具集是一組工具軟件的集合,包含應(yīng)用工具、插件工具等,即包含.exe文件,也包含.dll文件,每一個(gè)都是綠色小軟件,開(kāi)發(fā)者可以重新提取并通過(guò)聚合等方式制作自己的工具插件。

本發(fā)明一種基于工具集的桌面端插件開(kāi)發(fā)方法,該開(kāi)發(fā)模式提供插件擴(kuò)展框架,開(kāi)發(fā)者在該環(huán)境中遵循插件開(kāi)發(fā)規(guī)范,基于開(kāi)發(fā)環(huán)境提供的基礎(chǔ)二次開(kāi)發(fā)庫(kù),即可快速擴(kuò)展所需桌面端插件,并可以發(fā)布為云服務(wù)。

該種開(kāi)發(fā)模式完全按照云的思想構(gòu)建,針對(duì).NET平臺(tái)版本的桌面端,提出了一套通用的桌面端開(kāi)發(fā)標(biāo)準(zhǔn)與規(guī)范,遵循此標(biāo)準(zhǔn)規(guī)范開(kāi)發(fā)桌面工具與工具插件,開(kāi)發(fā)出來(lái)的工具插件可以自由組合、重構(gòu)、聚合等,保證了所開(kāi)發(fā)的平臺(tái)軟件的重構(gòu)、聚合、遷移、縱生的特性。

本發(fā)明的技術(shù)方案包括第三方界面庫(kù)、宿主程序、插件引擎、插件程序集四大模塊。

上述第三方界面庫(kù)提供界面控件對(duì)象,被宿主程序調(diào)用來(lái)實(shí)現(xiàn)與插件對(duì)象間的交互;

上述宿主程序是整個(gè)插件開(kāi)發(fā)框架運(yùn)行的入口,它通過(guò)插件引擎加載插件對(duì)象,并將插件對(duì)象以用戶界面(UI)的形式來(lái)展示,以及負(fù)責(zé)協(xié)調(diào)這些插件對(duì)象與界面控件間的交互;

上述插件引擎負(fù)責(zé)解析插件程序集,提取插件程序集中的插件類型信息,并提交給宿主程序生成對(duì)應(yīng)的界面對(duì)象;

進(jìn)一步地,插件引擎提供一種通訊契約,即插件接口,插件程序集只要實(shí)現(xiàn)了這些接口,就能被插件引擎認(rèn)可為合格的插件;

進(jìn)一步地,插件引擎提供一個(gè)插件容器(PluginContainer),負(fù)責(zé)管理插件的加載、卸載等狀態(tài)控制;

進(jìn)一步地,插件引擎提供一個(gè)運(yùn)行框架(Application),負(fù)責(zé)管理插件引擎運(yùn)行狀態(tài)、與插件程序集間的交互以及與地圖數(shù)據(jù)(MapDocument)交互。

上述插件程序集是實(shí)現(xiàn)了插件引擎定義的插件契約的應(yīng)用程序集,是基于.NET框架的應(yīng)用功能的主體實(shí)現(xiàn)。

圖1為基于云計(jì)算的桌面端插件開(kāi)發(fā)模式。

基于云計(jì)算的桌面端插件開(kāi)發(fā)模式,實(shí)質(zhì)是“框架+插件”的開(kāi)發(fā)模式,首先提供功能完備的插件框架(開(kāi)發(fā)環(huán)境),以及預(yù)置一些基礎(chǔ)和專業(yè)領(lǐng)域常用的工具插件,以供開(kāi)發(fā)者靈活調(diào)用、配置。從宏觀上看,桌面端插件開(kāi)發(fā)模式如圖1所示。

圖2為桌面端插件開(kāi)發(fā)中間件示意圖,該中間件提供插件擴(kuò)展框架,開(kāi)發(fā)者在該環(huán)境中遵循插件開(kāi)發(fā)規(guī)范,基于開(kāi)發(fā)環(huán)境提供的基礎(chǔ)二次開(kāi)發(fā)庫(kù),即可快速擴(kuò)展所需桌面端插件,并可以發(fā)布為云服務(wù)。開(kāi)發(fā)中間件包括以下模塊:

宿主程序模塊:宿主程序是整個(gè)插件開(kāi)發(fā)框架運(yùn)行的入口,它通過(guò)插件引擎加載插件對(duì)象,并將插件對(duì)象以用戶界面(UI)的形式來(lái)展示,以及負(fù)責(zé)協(xié)調(diào)這些插件對(duì)象與界面控件間的交互;

第三方界面庫(kù)模塊(Dxp):第三方界面庫(kù)提供界面控件對(duì)象,被宿主程序調(diào)用來(lái)實(shí)現(xiàn)與插件對(duì)象間的交互;

插件引擎模塊:插件引擎負(fù)責(zé)解析插件程序集,提取插件程序集中的插件類型信息,并提交給宿主程序生成對(duì)應(yīng)的界面對(duì)象;插件引擎提供一種通訊契約,即插件接口,插件程序集只要實(shí)現(xiàn)了這些接口,就能被插件引擎認(rèn)可為合格的插件;插件引擎提供一個(gè)插件容器(PluginContainer),負(fù)責(zé)管理插件的加載、卸載等狀態(tài)控制;插件引擎提供一個(gè)運(yùn)行框架(Application),負(fù)責(zé)管理插件引擎運(yùn)行狀態(tài)、與插件程序集間的交互以及與地圖數(shù)據(jù)(MapDocument)交互。

所述插件容器(PluginContainer)通過(guò)從插件程序集(Plugin….dll)中獲取插件對(duì)象,分別裝入對(duì)應(yīng)的插件容器(PluginContainer)中,實(shí)現(xiàn)插件的加載;從插件容器(PluginContainer)中刪除插件對(duì)象,實(shí)現(xiàn)插件的卸載。

插件程序集模塊:插件程序集是實(shí)現(xiàn)了插件引擎定義的插件契約的應(yīng)用程序集,是基于.NET框架的應(yīng)用功能的主體實(shí)現(xiàn)。

圖3為桌面端插件的開(kāi)發(fā)步驟圖,即圖2插件程序集模塊中的插件的開(kāi)發(fā)步驟。

本技術(shù)方案提供給用戶的開(kāi)發(fā)工具基本是由可定制框架和若干插件組成,同一框架下的插件可以是由不同的開(kāi)發(fā)者提供,因此本開(kāi)發(fā)模式可以基于已有的框架開(kāi)發(fā)各類業(yè)務(wù)插件。

一種基于工具集的桌面端插件框架的實(shí)現(xiàn)或開(kāi)發(fā)方法,其包括以下步驟:

步驟1):配置開(kāi)發(fā)環(huán)境。將開(kāi)發(fā)所需的集成開(kāi)發(fā)環(huán)境、開(kāi)發(fā)者授權(quán)許可文件、開(kāi)發(fā)框架文件等下載到PC端,實(shí)現(xiàn)一鍵部署;

步驟2):開(kāi)發(fā)/調(diào)試:在遵循插件契約的前提下,用戶按照接口說(shuō)明在配置好的開(kāi)發(fā)環(huán)境中調(diào)用已有的插件,實(shí)現(xiàn)插件接口,并按照用戶的個(gè)性需求編寫(xiě)相應(yīng)的代碼完成整個(gè)插件的開(kāi)發(fā),生成一個(gè)合格的插件;

步驟3):測(cè)試:開(kāi)發(fā)者進(jìn)行插件測(cè)試并按照進(jìn)行測(cè)試結(jié)果的填寫(xiě),插件測(cè)試通過(guò)后進(jìn)入下一步驟;

步驟4):發(fā)布:測(cè)試通過(guò)的插件,發(fā)布在插件程序集中,供插件容器加載、運(yùn)行;

步驟5):提交:插件引擎提取插件程序集中的插件類型信息,并提交給宿主程序生成對(duì)應(yīng)的界面對(duì)象。

圖4為宿主程序啟動(dòng)、關(guān)閉的流程圖。

宿主程序負(fù)責(zé)了界面的解析、加載、運(yùn)行、保存過(guò)程,其啟動(dòng)過(guò)程必須滿足用戶的配置性和嵌入性需求,宿主程序的啟動(dòng)、關(guān)閉過(guò)程大概分為如下幾個(gè)步驟:

步驟301:加載內(nèi)部Application.xml文件,根據(jù)XML初始化系統(tǒng)屬性,并且加載歡迎屏(如果存在歡迎屏則加載,否則不加載);

步驟302: 判斷是否存在配置文件(exe.config文件),如果不存在,則將Application.xml的內(nèi)容賦值給新文檔RealDoc,否則將配置文件exe.config的內(nèi)容賦值給新文檔RealDoc;

步驟303:根據(jù)新文檔來(lái)修訂系統(tǒng)屬性、創(chuàng)建插件對(duì)象、創(chuàng)建界面、發(fā)送事件;

步驟304:宿主程序啟動(dòng)完成(如果前面加載了歡迎屏,關(guān)閉歡迎屏);

步驟305:宿主程序關(guān)閉,宿主程序需要保存用戶界面以備下次啟動(dòng)應(yīng)用程序,它將會(huì)保存用戶當(dāng)前的所有設(shè)置,待下次啟動(dòng)時(shí)則根據(jù)配置文件初始化為上次保存的界面。

圖5是插件的動(dòng)態(tài)加載實(shí)現(xiàn)原理。

插件的動(dòng)態(tài)加載可以通過(guò).NET Framework的反射機(jī)制來(lái)實(shí)現(xiàn)。反射是動(dòng)態(tài)發(fā)現(xiàn)類型信息的一種能力,它類似后期綁定,幫助開(kāi)發(fā)人員在程序運(yùn)行時(shí)利用一些信息動(dòng)態(tài)地使用類型。在.NET Framework中,為了實(shí)現(xiàn)動(dòng)態(tài)加載,提供了Assembly,Type和Activator等類和相關(guān)方法。

圖6是插件的加載步驟。

步驟501:插件容器(PluginContainer)加載插件程序集(Plugin….dll)。若之前未加載插件,則將插件程序集(Plugin….dll)插入到插件程序集列表末尾;

步驟502:插件容器(PluginContainer)創(chuàng)建所有實(shí)現(xiàn)了IPlugin接口的對(duì)象,并將每個(gè)對(duì)象添加到相應(yīng)的插件詞典中;

步驟503:宿主程序(Apploader.exe)處理PluginAdded事件來(lái)創(chuàng)建界面并發(fā)送PluginLoadedEvent事件 。

圖7是插件的卸載步驟,插件的卸載與加載相反。

步驟601:插件容器(PluginContainer)卸載插件程序集(Plugin….dll),若插件未卸載,則將插件程序集(Plugin….dll)從插件程序集列表中移除;

步驟602:刪除插件容器(PluginContainer)中所有實(shí)現(xiàn)了IPlugin接口的對(duì)象,并將每個(gè)對(duì)象從相應(yīng)的插件詞典中移除;

步驟603:宿主程序處理PluginRemoved事件來(lái)刪除界面并發(fā)送PluginUnLoadedEvent事件。

圖8是插件運(yùn)行框架(Application),負(fù)責(zé)管理插件引擎運(yùn)行狀態(tài)和與插件程序集(Plugin….dll)間的交互。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
罗山县| 延庆县| 巴林左旗| 固始县| 万盛区| 铁力市| 古丈县| 泸水县| 谢通门县| 紫阳县| 浦江县| 景东| 兖州市| 石河子市| 阿鲁科尔沁旗| 远安县| 大新县| 古蔺县| 广东省| 冷水江市| 交口县| 大港区| 绥江县| 乐至县| 普兰店市| 胶州市| 青岛市| 西青区| 枞阳县| 淳化县| 南召县| 裕民县| 永新县| 涪陵区| 法库县| 越西县| 剑川县| 江西省| 横峰县| 富顺县| 防城港市|