在 OSGI 包中重用组件树?
Reusing component tree in OSGI bundle?
在 OSGI 包中包含 UI 并在其他包中重用此 UI 时,是否有最佳实践?
例如,我有一个自定义组件树,其中每个组件都扩展了 IComponent。例如库存字段:
InventoryField extends BaseInventoryField
BaseInventoryField extends GridField
GridField extends BaseComponent
BaseComponent implements IComponent
这样我可以防止代码重复,如果我不这样做,我必须将来自 BaseComponent、GridField 和 BaseInventoryField 的代码放入 InventoryField class。当某些内容发生变化并且您有很多组件时,这会造成大量维护和代码重复。
我知道不应该从另一个包扩展 class(eclipse 给我 "is not API" 警告)。但是我不能将所有东西都放在 1 个包中,因为其他包必须能够创建 GUI(无需在包中重新创建整个组件树)。
这种问题有解决办法吗?
您绝对可以而且应该从另一个包扩展 类,OSGi 不会阻止您这样做。但是,这些 类 的实现现在是捆绑包 public API 的一部分,您需要跟踪 API 更改。它比实现接口的耦合更紧密。
Eclipse 可帮助您跟踪 API 更改,查看有关 API 基线的文档。
在 OSGI 包中包含 UI 并在其他包中重用此 UI 时,是否有最佳实践?
例如,我有一个自定义组件树,其中每个组件都扩展了 IComponent。例如库存字段:
InventoryField extends BaseInventoryField
BaseInventoryField extends GridField
GridField extends BaseComponent
BaseComponent implements IComponent
这样我可以防止代码重复,如果我不这样做,我必须将来自 BaseComponent、GridField 和 BaseInventoryField 的代码放入 InventoryField class。当某些内容发生变化并且您有很多组件时,这会造成大量维护和代码重复。
我知道不应该从另一个包扩展 class(eclipse 给我 "is not API" 警告)。但是我不能将所有东西都放在 1 个包中,因为其他包必须能够创建 GUI(无需在包中重新创建整个组件树)。
这种问题有解决办法吗?
您绝对可以而且应该从另一个包扩展 类,OSGi 不会阻止您这样做。但是,这些 类 的实现现在是捆绑包 public API 的一部分,您需要跟踪 API 更改。它比实现接口的耦合更紧密。
Eclipse 可帮助您跟踪 API 更改,查看有关 API 基线的文档。