模塊化和插件化-小結(jié)
現(xiàn)在我們來(lái)對(duì)OSGi.NET的“模塊化和插件化”做一個(gè)小結(jié),再次把官方的說(shuō)明拿出來(lái)。
1) 物理隔離:基于UIOSP開發(fā)的模塊是一個(gè)物理隔離的可單獨(dú)部署的模塊,每一個(gè)模塊擁有獨(dú)立的文件夾、類型空間、資源和類加載器。模塊間互相獨(dú)立、互相隔離且互不影響。
a) 先看看上面實(shí)例目錄結(jié)構(gòu)
b) 很明顯的看出,三個(gè)模塊的確是被“隔離“在三個(gè)不同的文件夾內(nèi),且Calculator.Demo1和RemotingManagement、WebServiceWrapperService無(wú)依賴,即前者無(wú)法知道后兩者是否存在,也不需要知道,他們相互不影響。因?yàn)槲覀儗alculator.Demo1放入Plugins目錄之前或之后,對(duì)于其他兩個(gè)模塊來(lái)說(shuō),沒有什么不同,沒有影響他們的功能和作用。同樣,我們將RemotingManagement、WebServiceWrapperService移出Plugins目錄后,也不會(huì)對(duì)Calculator.Demo1有影響。
c) 但RemotingManagement和WebServiceWrapperService是相互依賴的,WebServiceWrapperService作為一個(gè)Web Service包裝器向RemotingManagement提供服務(wù),所以RemotingManagement要依賴WebServiceWrapperService。當(dāng)移掉WebServiceWrapperService之后,RemotingManagement就無(wú)法正常啟動(dòng),OSGi.NET會(huì)拋出異常并記錄在log.txt中。
為了驗(yàn)證OSGi.NET的這個(gè)“依賴解析”功能,我們將WebServiceWrapperService移出Plugins目錄。照常按F5啟動(dòng)程序,界面上你是看不到任何變化,但這時(shí)再打開“遠(yuǎn)程管理工具”,就提示“無(wú)法連接到遠(yuǎn)程服務(wù)器”了。
同時(shí),在log.txt中會(huì)出現(xiàn)依賴解析異常信息
2) 高度可重用:模塊的重用不需要再更改任何代碼,只需要將模塊拷貝到UIOSP指定的插件目錄下,它的功能便向其它模塊暴露。
a) RemotingManagement和WebServiceWrapperService就是最好的例子,幾乎模板中每個(gè)主應(yīng)用程序都包含這兩個(gè)模塊,且都是一樣的。
3) 規(guī)范化:模塊具有統(tǒng)一的標(biāo)準(zhǔn),每一個(gè)模塊的目錄結(jié)構(gòu)、模塊配置都是統(tǒng)一的,開發(fā)方法也完全一致。
a) Plugins里的三個(gè)模塊幾乎相同,Manifest.xml,程序集或以來(lái)程序及和資源文件等。
4) 快速集成:僅需要將模塊都拷貝到指定的插件目錄就能夠?qū)崿F(xiàn)模塊功能的快速集成,無(wú)需再更改任何的代碼。
a) 同理2)中a)描述。
5) 易部署和升級(jí):通過(guò)拷貝即可實(shí)現(xiàn)部署和升級(jí)。
a) 同理2)中a)描述。