1

我目前正在开发一个包含一组核心功能的 Java 应用程序,这必须针对几个不同的目的(约 10 个不同的目的)进行扩展,因此,想到的最佳解决方案是添加插件的选项在需要时扩展功能,而不是为每个功能使用不同的代码库。

最好的方法是简单地创建一个接口并在相关插件中扩展它吗?

public coreCode()
{
    // Core
    doThis();
    doThat();
    // Call plugin code
    plugin.doStuff();
}

// Plugin
public interface PluginInterface()
{
    doStuff();
    ...
}

我已经研究过 JSF 等,但由于工作限制(没有特别授权等),遗憾的是它们不是一个可行的选择。

- 编辑 -

它应该大致像这样工作:

目的 A、B 和 C 需要一组特定的功能,因此为它们开发了 plugin1,与它们捆绑然后部署。目的 D 和 E 需要不同的集合,因此为它们开发、捆绑和部署了 plugin2。等等

4

2 回答 2

1

对于插件,您可以创建一个特定的目录,其中实现某个接口或扩展某个抽象类的类文件所在的位置。然后您可以创建这些类的新实例并查看它们是否是您希望它们成为的抽象类/接口的实例,然后列出它们并让用户能够启用/禁用它们。如果它们已启用,您就可以强制转换并执行它们。

于 2013-05-23T11:41:48.767 回答
0

我建议您研究OSGi - 一个动态组件模型,其中应用程序被开发和部署为一组可以远程添加、启动、停止和删除的包/插件,甚至不需要重新启动核心/主机应用程序.

您可以在 Eclipse RCP 平台(OSGi 的最佳实现之一)上为您的应用程序建模,并创建一个无头(没有任何 UI)核心 RCP 应用程序。然后,所有其他应用程序功能将被开发为插件,可以捆绑或稍后以您喜欢的任何组合(或您的客户可能要求)添加到您的核心 RCP 应用程序,即使在应用程序上线后也是如此。

如果您的应用程序将有一个 UI,并且您喜欢 Eclipse IDE 的外观和功能,例如“新建项目”向导、使用透视图来更改视图的布局、工作区、上下文相关的帮助功能和通过网络更新插件存储库等,那么绝对值得考虑。查看此RCP 常见问题解答页面,看看这是否符合您的需求。

唯一让开发人员望而却步的是它的学习曲线有点陡峭。依赖项总是使用 XML 以声明方式声明,并且在代码中,所有组件都如此解耦,以至于您总是会发现自己与框架进行了更多的交互。

使用 JFace 构建 UI 组件给模型和视图之间的分离带来了很大的压力。因此,尽管所有这些都转化为良好的应用程序设计,但如果一个框架新手,它不允许快速的应用程序开发。它的大多数其他复杂性来自于 RCP 提供的东西太多。

于 2013-05-23T13:27:45.990 回答