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

Class FamilyInfo
{

private String familyName;//家庭名稱

private int population; //人口數量

private int incomePerYear; //年收入

.(省略Getter和Setter方法)
}


為了滿足這個需求,小李決定添加一個靜態的排序方法:

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

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