近期做了幾個(gè)使用OSGi開(kāi)發(fā)的應(yīng)用,發(fā)現(xiàn)使用過(guò)細(xì)粒度的Bundle不會(huì)給項(xiàng)目帶來(lái)任何好處,而很多設(shè)計(jì)人員實(shí)際都會(huì)在使用OSGi平臺(tái)時(shí)陷入這個(gè)陷阱。
首先我們分析OSGi的特點(diǎn)及可以給我們應(yīng)用帶來(lái)的好處
1 良好的動(dòng)態(tài)特性
2 更細(xì)粒度的類裝載控制,多個(gè)版本組件在同一運(yùn)行環(huán)境中共同運(yùn)行
3 在JVM內(nèi)部實(shí)現(xiàn)SOA(我個(gè)人倒是認(rèn)為OSGi所涉及的僅僅是SOA思想的一小部分)
4 DS提供的IoC支持
請(qǐng)思考你的應(yīng)用程序真的需要這些嗎?
很多設(shè)計(jì)和開(kāi)發(fā)人員都會(huì)在設(shè)計(jì)和實(shí)現(xiàn)時(shí)忽略應(yīng)用的真正需要和OSGi的復(fù)雜性,將應(yīng)用的所有內(nèi)部細(xì)小劃分都采用Bundle實(shí)現(xiàn)。
而我們除了應(yīng)該注意采用OSGi開(kāi)發(fā)和調(diào)試帶來(lái)的復(fù)雜性;同時(shí)也要明白動(dòng)態(tài)特性的支持并不是僅僅采用OSGi平臺(tái)就可以搞定的,要真正實(shí)現(xiàn)動(dòng)態(tài)特性必須注意模塊的啟動(dòng)順序無(wú)關(guān)性及對(duì)其所依賴服務(wù)的監(jiān)聽(tīng)等,這些都會(huì)大大增加系統(tǒng)實(shí)現(xiàn)和調(diào)試的復(fù)雜性。
其實(shí)我們應(yīng)該認(rèn)真分析應(yīng)用是否需要這些OSGi的特性及這些特性應(yīng)該在應(yīng)用的那些部分體現(xiàn),例如我們可以在擴(kuò)展方面采用Bundle實(shí)現(xiàn)擴(kuò)展插件,至于其它部分則不必采用過(guò)多的Bundles(甚至可以采用一個(gè)大的Bundle,而其內(nèi)部則可以采用如Spring來(lái)幫助我們實(shí)現(xiàn)模塊化)。
同時(shí),不要忘記其他的framework同樣提供了很好的組件化的基礎(chǔ)架構(gòu)如Spring,Pico-Container,在OSGi與其它技術(shù)混合時(shí)SCA同樣是很好的選擇。
保持應(yīng)用的簡(jiǎn)單性,不要針對(duì)特定技術(shù)進(jìn)行設(shè)計(jì),而要為設(shè)計(jì)選擇適合的技術(shù)。
蔡超
Chaocai2001@yahoo.com.cn
JEE咨詢顧問(wèn)
SCEA(1.2&5)
IBM Certified OOA&D Solution Designer vUML2