我目前正在开发一个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是为他们开发,捆绑和部署。等。
发布于 2013-05-23 11:41:48
对于插件,您可以创建一个特定目录,其中包含实现特定接口的类文件或扩展某个抽象类。然后您可以创建这些类的新实例,并查看它们是否是您希望它们成为的抽象类/接口的实例,然后列出它们的特定列表,并赋予用户启用/禁用它们的能力。如果启用了它们,则可以强制转换和执行它们。
发布于 2013-05-23 13:27:45
我建议您研究一下OSGi --一种动态组件模型,在这种模型中,应用程序被开发和部署为一组包/插件,可以添加、启动、停止和远程删除,甚至不需要重新启动核心/主机应用程序。
您可以在Eclipse平台(OSGi的最佳实现之一)上对您的应用程序建模,并创建一个无头(没有任何UI)的核心RCP应用程序。然后,所有其他应用程序功能都将被开发为插件,这些插件可以打包或添加到您的核心RCP应用程序中,您喜欢的任何组合(或者您的客户可能会请求),即使在应用程序运行之后也是如此。
如果您的应用程序具有UI,并且喜欢Eclipse的外观和功能,如“新项目”向导、使用视图来更改视图的布局、工作区、上下文敏感的帮助功能以及通过插件存储库进行跨网络更新等,那么这绝对值得考虑。查看一下这个RCP常见问题页面,看看它是否适合您的需要。
唯一让开发人员望而却步的是,它有一个陡峭的学习曲线。依赖关系总是用XML声明的,在代码中,所有组件都是解耦的,因此您总是发现自己更多地与框架交互。
使用JFace构建UI组件给模型和视图之间的分离带来了很大的压力。因此,尽管所有这些都转化为良好的应用程序设计,但如果对框架来说是新的,则不允许快速开发应用程序。它的大部分其他复杂性来自于RCP有这么多东西可以提供的事实。
https://stackoverflow.com/questions/16712945
复制相似问题