如何分析OSGi service platform的機(jī)制?給出幾個(gè)硬生生的例子,然后分析一下
代碼?那還不如你自己看書看規(guī)范好了。因此,我覺得還是結(jié)合一個(gè)應(yīng)用實(shí)例來分析會更
容易理解,當(dāng)然,是一個(gè)假想的應(yīng)用實(shí)例。用怎樣一個(gè)實(shí)例呢?嗯......
幾個(gè)月前,一個(gè)中學(xué)同學(xué)打電話給我說他們要在PDA上開發(fā)一個(gè)簡單的應(yīng)用程序來臨時(shí)紀(jì)
錄工作的結(jié)果,并向我咨詢,這種開發(fā)的難度和周期。這事啟發(fā)我了,就以PDA的應(yīng)用為
背景,讓我們來假想一個(gè)場景,從而來比較傳統(tǒng)的應(yīng)用模型與采用OSGi的應(yīng)用模型有怎樣
的區(qū)別。
我這樣想象:
小李是一個(gè)軟件工程師,在一家專門為PDA開發(fā)應(yīng)用程序和解決方案的公司工作。最近,
他剛為公司的一個(gè)客戶開發(fā)完成了一套運(yùn)行在PDA的JAVA應(yīng)用程序,我們不要關(guān)心PDA是
什么硬件配置,只要知道它配備了JVM(cvm) + CDC以及PP和文件系統(tǒng)(呵呵設(shè)備還是比較
強(qiáng)勁的)。而這個(gè)客戶是一個(gè)慈善機(jī)構(gòu),該機(jī)構(gòu)人員攜帶PDA進(jìn)入偏遠(yuǎn)山區(qū)收集生活困難
家庭的信息,以準(zhǔn)備進(jìn)行資助。而這套程序?qū)簳r(shí)把家庭信息保存在PDA中,并隨時(shí)供
用戶查詢修改。用戶使用一個(gè)月后,反饋非常好,但是,他們有新需求了,說原來只是想紀(jì)錄
信息就成了,現(xiàn)在希望能給出一些排序功能,比如按家庭年收入對紀(jì)錄進(jìn)行排序.
接到這個(gè)需求,小李一看,這個(gè)簡單,只要增加一個(gè)排序方法就可以了,讓我們假設(shè)他使用了如下
數(shù)據(jù)結(jié)構(gòu)來紀(jì)錄家庭信息:

Class FamilyInfo
{

private String familyName;//家庭名稱

private int population; //人口數(shù)量

private int incomePerYear; //年收入

.(省略Getter和Setter方法)
}


為了滿足這個(gè)需求,小李決定添加一個(gè)靜態(tài)的排序方法:

public static FamilyInfo[] sortByIncomePerYear(FamilyInfo[] familyInfos)
{
//根據(jù)incomePerYear的值進(jìn)行冒泡排序。
}

把相關(guān)連部分修改完畢后,小李重新制作了安裝包和啟動腳本,發(fā)送給客戶,不管客戶如何操作
總之,原來的PDA程序必須卸載,新程序必須拷貝到PDA上再次執(zhí)行安裝,重新啟動運(yùn)行。
又過了一陣,客戶說,要求提供按人均年收入進(jìn)行排序,然后同樣的事情又發(fā)生了......
幾個(gè)輪次下來,小李發(fā)現(xiàn),客戶的需求還在增加,他們可能要求增加一個(gè)字段,記錄目前該
家庭得到的資助額,還可能添加按收入范圍查詢紀(jì)錄等等,事情還遠(yuǎn)沒有結(jié)束。
如何改進(jìn)這個(gè)情況呢?當(dāng)然,改進(jìn)涉及多方面,比如從軟件本身出發(fā),可以使用合適的design
pattern重新設(shè)計(jì)程序的體系結(jié)構(gòu),使得程序更易于擴(kuò)展,關(guān)于這一點(diǎn),有太多的討論了,我就不
摻和了。還有從部署方面說,配置,安裝和卸載程序,對最終用戶往往是一項(xiàng)mission impossible,
能否讓應(yīng)用程序自己升級,而用戶只要點(diǎn)擊一個(gè)"升級"來觸發(fā)這個(gè)過程而已......
我想你當(dāng)然知道我給的答案:OSGi,OSGi,OSGi!!!!