问题标签 [plugin-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
23164 浏览

java - Java插件框架选择

我们正在尝试确定如何为我们正在实现的服务实现一个简单的插件框架,该框架允许“插入”不同类型的计算器。

在阅读了一些关于 Java 插件框架的帖子之后,最常见的选项似乎是:

OSGI 似乎超出了我们的需要。

“滚动你自己的”是可以的,但重用一个公共库会很好。

所以我们只需要 JPF 和 JSPF。JPF 似乎不再处于积极开发中。

JSPF 看起来非常简单,而且确实是我们所需要的。但是我没有听到太多关于它的消息。我只在 StackOverflow 上看到过一篇关于它的帖子。有没有其他人对 JSPF 有任何经验?或者对此设计选择有任何其他意见?


更新:这不一定有正确的答案.. 但是我们将采用 Pavol 的想法,因为我们只需要一个非常非常简单的解决方案。感谢 EoH 的精彩指南。

0 投票
3 回答
224 浏览

java - 如何使用 Spring 的 DI 在 Web 应用程序上基于每个用户交换实现

假设 Web 应用程序是一个中央支付处理引擎,其中每个用户可能有不同的信用卡提供商来处理信用卡。

有一个所有实现都遵循的接口。

我想知道是否存在一种模式,您可以允许将新实现简单地放入部署文件夹(.jar 文件)中,而无需重新编译应用程序。最多您必须进入管理部分并输入有关新信用卡实施的一些详细信息。

示例:假设应用程序当前支持 Authorize.net。所以所有用户都在使用authorize.net。现在我编写了一个新实现并删除了 .jar 文件,进入管理员并注册新的信用卡提供商。

现在用户可以登录系统,并选择使用新的实现。

这可能不需要重新编译吗?spring 的 DI 会为此派上用场吗?

0 投票
9 回答
69397 浏览

plugins - 如何创建灵活的插件架构?

在我的开发工作中,一个重复的主题是使用或创建内部插件架构。我已经看到它采用了很多方法——配置文件(XML、.conf 等)、继承框架、数据库信息、库等等。在我的经验中:

  • 数据库不是存储配置信息的好地方,尤其是与数据混合的地方
  • 尝试使用继承层次结构需要有关要编码的插件的知识,这意味着插件架构并不是那么动态的
  • 配置文件可以很好地提供简单的信息,但不能处理更复杂的行为
  • 库似乎运行良好,但必须仔细创建单向依赖项。

当我试图从我使用过的各种架构中学习时,我也在向社区寻求建议。您是如何实现 SOLID 插件架构的?你最糟糕的失败是什么(或者你见过的最糟糕的失败)是什么?如果你要实现一个新的插件架构,你会怎么做?您使用过的哪个 SDK 或开源项目具有良好架构的最佳示例?

我自己找到的几个例子:

这些例子似乎发挥了各种语言的优势。一个好的插件架构是否必须与语言相关联?最好使用工具来创建插件架构,还是在自己的以下模型上进行?

0 投票
2 回答
619 浏览

events - 创建插件,公开事件

如何向我的插件用户公开事件?


我知道我应该使用:

触发事件,但我正在寻找描述如何在插件中声明和调用事件的最佳实践。

0 投票
6 回答
11691 浏览

c# - C# DLL 的插件架构

我有一个程序,我开发了一个使用基本插件架构的程序。实际上,当程序加载时,它使用反射在目录中搜索适合某个接口的 dll,然后加载它们。现在看来,当前的插件列表就是将要使用的所有插件。

因此,我目前检查 dll 文件的做法仍然是最佳做法,还是有更好的方法来加载每个 dll?

谢谢。

0 投票
4 回答
2179 浏览

jquery - 范围内的 CSS 重置

我有一个 jQuery 插件,它将动态地向页面呈现大量的 HTML。我希望插件的使用者能够按原样使用它,并且无论他们使用什么 CSS 样式,它看起来都一样。

因此,我需要一个“范围”的 CSS 重置 - 即在我的插件 div 中说任何内容的能力不应受到所有者 CSS 的影响。

现在显然我可以重置我在这个范围内使用的所有 HTML 元素,但它看起来不是很优雅。其他人会以任何方式处理这个问题吗?

0 投票
3 回答
16940 浏览

c# - 实现插件架构 - 动态 DLL 加载

我有一个应用程序,它基本上是一个带有预加载控件的设计器,您可以在其中使用控件设计页面。

我计划在未来发布越来越多的控件。我不想为新添加的控件发布新版本,因为它有其缺点。所以我在考虑插件/插件类型的架构,我只需单独发布插件/插件,他们可以安装并获取设计器内部的控件。

现在,我使用 xml 文件作为插件来指定控件、其行为、样式等。每个 xml(插件)代表一个控件。但是我发现实现这一点非常困难,因为我必须编写一个通用解析器来读取所有插件。

相反,我可以为每个插件发布一个 dll,让我有更多的控制权来编写代码来定义控件的行为/外观并通过主引擎动态加载它吗?如果是这样,我如何检查 dll 并将其动态加载到我的应用程序中?

0 投票
2 回答
463 浏览

python - 插件设计问题

我的程序分为两部分:处理用户界面和其他“主程序”内容的引擎和一组插件,它们提供处理特定输入的方法。

每个插件都写在自己的模块中,并提供一个函数,允许我向插件发送和检索数据。

这个函数的名称在所有插件中都是相同的,所以我只需要确定调用哪一个,然后插件将处理其余的。

我已将所有插件放在一个子文件夹中,编写了一个__ init__.py导入每个插件的文件,然后导入该文件夹(我认为它称为包?)

无论如何,目前我明确告诉它要导入什么(基本上是“导入这个”,“导入那个”)。有没有办法让我编写它,以便它将导入该文件夹中的所有插件,以便我可以添加其他插件而无需编辑初始化文件?

0 投票
1 回答
1050 浏览

java - 我应该如何在分层的 Java EE 应用程序中设计插件系统?

我有一个基于 Java EE 的 REST api 应用程序。它有一个分层架构,如下所示:

  1. 资源(Jax-rs 资源)
    • 对象验证
    • 对象映射器
  2. 服务层
  3. 存储层
  4. JPA 实体

一切都使用 Spring 依赖注入进行连接。

我需要以这样一种方式设计这个核心应用程序,它允许其他外部开发人员编写扩展/插件并覆盖或扩展核心中的任何次要或主要功能。如果有帮助的话,可以把它想象成 Java EE 中的 Wordpress CMS。您将如何围绕当前架构设计插件系统?

我能想到的一种显而易见的方法是覆盖或向适当的资源(使用验证、objectmapper)、服务、存储库和实体添加新功能,并从中创建一个 jar + xml。但是我想确保插件开发人员必须编写绝对最少数量的代码才能使新功能正常工作,同时重用核心代码的混乱。

假设,您想要创建一个 wordpress 博客文章扩展,它允许您创建博客文章,其中包含一些核心中尚不存在的额外字段。设计当前 Java EE 应用程序的最简单和最干净的方法是什么,以便插件/扩展开发人员容易?任何可能有用的模式,如策略或模板方法模式?

是否有任何开源 Java CMS 遵循使用 Spring/JPA 和标准技术的模型?

0 投票
1 回答
191 浏览

c# - 在定义 ASP.Net Web 应用程序的架构时需要帮助?

我刚刚有一个项目要从头开始构建。它的前端是 ASP.Net,后端是 SQL 2008。要求是,应用程序的架构应该是这样的,以便我们可以从任何计算机(台式机、笔记本电脑、上网本)、手持设备以及智能手机访问应用程序、PDA、平板电脑。它还应该像 FB 和 orkut 一样本质上是可插入的。那就是将来如果客户端需要附加游戏或第三方应用程序,那么应该插入而不重新重写整个东西。客户端还需要使用工具包或 JQuery 对整个 Web 进行 ajaxified。

我以前有使用分层架构的 ASP.Net 网络表单应用程序的经验。所以这次满足他的所有需求,我正在考虑一个带有 WCF 服务的 Web 应用程序。但我对 SOA 和 MVC(全部三个)的可插拔架构一无所知或经验。似乎如果我实现所有的东西,它将是一大堆代码。对于可插入的拱门,我用谷歌搜索并在 codeplex 上找到了 MEF。所以最后我想出了以下几点:

  1. ASP.Net MVC
  2. MEF
  3. jQuery
  4. WCF
  5. 带有 AJAX 的 RESTful
  6. XML

伙计们,我真的需要你们的帮助,我想不出如何将所有这些东西放在一起。或者你有没有其他最好的选择。

另外,客户还有一个要求是他想要松耦合的代码,这就是我选择MVC的原因,aspx页面只能有控件并且需要的HTML,验证和其他代码应该在业务层中完成应用程序。

这将是很大的帮助。