【目錄】-【模塊化和插件化】-【小結】
現在我們來對OSGi.NET的“模塊化和插件化”做一個小結,再次把官方的說明拿出來
1) 物理隔離:基於UIOSP開發的模塊是一個物理隔離的可單獨部署的模塊,每一個模塊擁有獨立的文件夾、類型空間、資源和類加載器。模塊間互相獨立、互相隔離且互不影響。
a) 先看看上面實例目錄結構
b) 很明顯的看出,三個模塊的確是被“隔離“在三個不同的文件夾內,且Calculator.Demo1和RemotingManagement、WebServiceWrapperService無依賴,即前者無法知道后兩者是否存在,也不需要知道,他們相互不影響。因為我們將Calculator.Demo1放入Plugins目錄之前或之后,對於其他兩個模塊來說,沒有什么不同,沒有影響他們的功能和作用。同樣,我們將RemotingManagement、WebServiceWrapperService移出Plugins目錄后,也不會對Calculator.Demo1有影響。
c) 但RemotingManagement和WebServiceWrapperService是相互依賴的,WebServiceWrapperService作為一個Web Service包裝器向RemotingManagement提供服務,所以RemotingManagement要依賴WebServiceWrapperService。當移掉WebServiceWrapperService之后,RemotingManagement就無法正常啟動,OSGi.NET會拋出異常並記錄在log.txt中。
為了驗證OSGi.NET的這個“依賴解析”功能,我們將WebServiceWrapperService移出Plugins目錄。照常按F5啟動程序,界面上你是看不到任何變化,但這時再打開“遠程管理工具”,就提示“無法連接到遠程服務器”了。
同時,在log.txt中會出現依賴解析異常信息
2) 高度可重用:模塊的重用不需要再更改任何代碼,只需要將模塊拷貝到UIOSP指定的插件目錄下,它的功能便向其它模塊暴露。
a) RemotingManagement和WebServiceWrapperService就是最好的例子,幾乎模板中每個主應用程序都包含這兩個模塊,且都是一樣的。
b) 這應該是OSGi模塊化最“神奇”的地方吧,想像一下,將兩個文件夾放入主程序中,他的功能就增加了,移除了就減少了,對主程序和其他模塊沒有任何“物理傷害”!
3) 規范化:模塊具有統一的標准,每一個模塊的目錄結構、模塊配置都是統一的,開發方法也完全一致。
a) Plugins里的三個模塊幾乎相同,Manifest.xml,程序集或以來程序及和資源文件等。
4) 快速集成:僅需要將模塊都拷貝到指定的插件目錄就能夠實現模塊功能的快速集成,無需再更改任何的代碼。
a) 同理2)中a)描述。
5) 易部署和升級:通過拷貝即可實現部署和升級。
a) 同理2)中a)描述。