2013-10-23 50 views
3

我已經編寫了一個依賴於另一個插件版本1.0(我們稱之爲WidgetMaster)的Eclipse插件。現在,WidgetMaster 2.0版已經發布,並且在我使用的許多類中都進行了界面更改。如何在支持WidgetMaster的兩個版本的同時繼續維護我的插件的一個版本?Eclipse插件兼容性層(使用片段?)

到目前爲止,我想出是:

  1. 創建我自己的接口,通過WidgetMaster提供的所有功能。這意味着我也必須爲我使用的所有類型創建包裝,這是很多的。
  2. 對於WidgetMaster的每個受支持版本,創建一個Fragment項目,該項目根據該版本的API實現我的接口和所有包裝類。

這將是一個大量的工作,因爲我目前在我的插件代碼中使用WidgetMaster類。如果我只從我的Fragment項目中取決於WidgetMaster的特定版本,我將不得不移動幷包裝所有這些。另外,從版本到版本,99%的包裝將相同,但我仍然必須將它們複製到每個片段。

這是正確的方法還是有更好的方法來處理這種情況?

回答

1

如果您真的想爲長期範圍內的WidgetMaster插件的不同版本提供持續支持,則適配器模式看起來是正確的方式。

對於較短的支持時間,我會複製插件並利用我的版本控制系統及其合併功能。我會創建一個使用最新版本的WidgetMaster的不同分支。所以我有兩個版本的插件,每個版本都會使用不同版本的WidgetMaster,調用特定版本的API調用。確保您的VCS在設置完畢後已通知合併解決方案,以便將來的合併不會覆蓋API調用定製(例如,使用git合併的ours策略)。

這兩種不同的方法有開銷,但在不同的時間。適配器方法的初始開銷較大,而VCS方法的安裝速度更快。但是,一旦適配器已經實施,開銷很小,而VCS方法總是會產生合併開銷。

作爲一個附註,我想知道OSGi片段是否真的是您設置WidgetMaster使用版本的最佳選擇(如果您選擇適配器方法)。 我不是OSGi專家,但你可以看看OSGi service factories to give you the right version of WidgetMaster。顯然有更多的進化方式來完成OSGi的依賴注入:Apache Felix Maven SCR PluginBlueprint Container,Apache Felix iPojoThis SO question似乎涵蓋了OSGi中DI的問題。

祝你好運!我想知道你採用了哪條路線,因爲我很快就會遇到類似的挑戰!

+0

嗯,這不是一個理想的答案,但至少它給了我幾個地方開始尋找。謝謝! – takteek