3

我编写了一个 Eclipse 插件,它依赖于另一个插件的 1.0 版(我们称之为 WidgetMaster)。现在,WidgetMaster 2.0 版已经发布,对我使用的许多类进行了界面更改。如何在支持两个版本的 WidgetMaster 的同时继续维护我的插件的一个版本?

到目前为止,我想出的是:

  1. 为 WidgetMaster 提供的所有功能创建我自己的界面。这意味着我还必须为我使用的所有类型创建包装器,这很多。
  2. 对于每个受支持的 WidgetMaster 版本,创建一个 Fragment 项目,该项目根据该版本的 API 实现我的接口和所有包装类。

这将是大量的工作,因为我目前在我的插件代码中使用 WidgetMaster 类。如果我只依赖 Fragment 项目中特定版本的 WidgetMaster,我将不得不移动和包装所有这些。此外,99% 的包装器在不同版本之间都是相同的,但我仍然必须将它们复制到每个片段。

这是正确的方法还是有更好的方法来处理这种情况?

4

1 回答 1

1

如果您真的想为不同版本的 WidgetMaster 插件提供长期支持,适配器模式似乎是正确的方式。

为了更短的支持时间,我会复制插件并利用我的版本控制系统及其合并功能。我会创建一个使用最新版本的 WidgetMaster 的不同分支。所以我有两个版本的插件,每个都使用不同版本的 WidgetMaster,调用特定版本的 API 调用。确保您的 VCS 在所有设置完成后已被告知合并解决方案,以便将来的合并不会覆盖 API 调用自定义(例如ours使用 git merge 的策略)。

这两种不同的方法有开销,但在不同的时间。Adapter 方法的初始开销更大,而 VCS 方法设置起来更快。但是一旦实现了适配器,开销就很小,而 VCS 方法将始终具有合并开销。

作为旁注,我想知道 OSGi 片段是否真的是您设置使用 WidgetMaster 的版本的最佳选择(如果您选择适配器方法)。我不是 OSGi 专家,但您可以查看OSGi 服务工厂,为您提供正确版本的 WidgetMaster。显然有更多进化的方法可以使用 OSGi 完成依赖注入:Apache Felix Maven SCR PluginBlueprint ContainerApache Felix iPojo这个 SO question似乎涵盖了 OSGi 中的 DI 问题。

祝你好运!我想知道你走哪条路,因为我很快就会面临一些类似的挑战!

于 2013-11-05T18:08:44.510 回答