【问题标题】:Which plugin architecture to use使用哪个插件架构
【发布时间】:2012-11-10 21:26:24
【问题描述】:

我想为一个非常通用的应用程序创建一个插件扩展机制,该应用程序具有许多方面和许多不同的功能。

关于我开发的更多细节:

  • 我有一个 GUI 应用程序,想提供很多扩展点。我想添加菜单、操作、工具栏按钮等。
  • 我有一些非 GUI 服务,用于监控编辑数据的更改等。我想注册此类服务。

我正在考虑 Equinox(例如,由于应用程序限制,我不能使用它)及其非常好的可扩展性机制,其中涉及扩展和扩展点。这种方法有什么问题?有什么替代解决方案可以解决这个问题?

【问题讨论】:

  • 这个问题征求讨论和意见,不适合SO。 FAQ 清楚地提到这些类型的问题不适合这里的设计。投票结束不具建设性。如果您想搜索其他类似的机制,请使用搜索引擎 - Google 和 Bing 都非常适合此目的。
  • @KenWhite 我重新表述了这个问题,使其不那么模糊。

标签: plugins architecture osgi equinox extensibility


【解决方案1】:

对于 UI 可扩展性,eclipse RCP 肯定会在该领域提供很多功能。

对于较低层,听起来您正在查看 OSGi,其中 Equinox 只是许多可能的运行时环境之一。如果您坚持按照规范进行编码,那么您可以为您的应用程序使用 Equinox、Felix ... 或任何其他实现。

当你谈到可扩展性时,你并没有真正定义你在寻找什么,而对于这样一个开放式问题,你正在提出它是封闭的。

【讨论】:

    【解决方案2】:

    您编写什么样的应用程序?扩展和扩展点的eclipse机制是eclipse rcp的专有概念。因此,如果您编写一个 eclipse rcp gui,那么这就是要走的路。

    如果您编写服务器应用程序,那么 OSGi 服务更适合。对于服务器应用程序,我建议使用 Apache Karaf 而不是 Equinox。 Karaf 可以将 Equinox 作为 OSGi 框架运行,但它还提供许多附加功能,例如从 maven repos 部署和日志支持。这是一个small tutorial,介绍了如何使用 OSGi 和 Apache Karaf 编写简单的服务器应用程序。它展示了如何使用 OSGi 服务来解耦 api 和实现。

    为了可扩展性,您可能希望使用一种 API 和多种服务实现。这也是可能的。您可以获取接口的服务列表,还可以收到添​​加和删除服务的通知。

    【讨论】:

    • 我在描述中添加了更多细节。
    • 因此,对于 Eclipse rcp gui,您应该在正确的轨道上使用扩展。不确定这对于 Eclipse 4 是否完全正确,因为现在有很多基础设施也建立在 OSGi 服务之上。
    【解决方案3】:

    使用 OGSi 时需要注意的一个问题是,它为每个包(=模块)使用类加载器来将包相互隔离。这通常很痛苦,尤其是在使用并非设计用于 OSGi 环境的库时。最后,几乎所有由此产生的类加载问题都可以解决,但解决问题可能相当耗时。

    您还可以使用 spring 使您的程序模块化和可扩展。 Spring 的应用程序上下文可以嵌套,因此“模块”可以使用其父级的 spring bean,反之则不行。可以告诉 Spring 自动发现类路径上所有 jar 的应用程序上下文文件。要使用这种方法对 Eclipse 扩展点进行建模,一个模块可以提供一个具有“注册”方法的 bean,其他模块可以使用该方法来挂钩。

    使用来自另一个模块的服务就像在 spring 中获取对服务 bean 的引用一样简单(假设相应地设置了应用程序上下文层次结构)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2011-05-24
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多