标签: plugin-architecture

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

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

  • 数据库不是存储配置信息的好地方,尤其是与数据混合在一起
  • 尝试使用继承层次结构需要了解要编码的插件,这意味着插件架构不是那么动态
  • 配置文件适用于提供简单信息,但无法处理更复杂的行为
  • 库似乎运行良好,但必须仔细创建单向依赖.

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

我自己找到的几个例子:

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

language-agnostic architecture plugins plugin-architecture

149
推荐指数
7
解决办法
6万
查看次数

使用Java构建插件系统的最佳方法

您将如何为Java应用程序实现插件系统?

是否可以使用易于使用(对于开发人员)系统,实现以下目标:

  • 用户将他们的插件放入应用程序的子目录中
  • 插件可以提供配置屏幕
  • 如果您使用框架,许可证是否与商业开发兼容?

java plugins frameworks design-patterns plugin-architecture

142
推荐指数
7
解决办法
9万
查看次数

视图必须派生自WebViewPage或WebViewPage <TModel>

我正在关注Justin Slattery的插件架构教程,并尝试将其用于Razor,而不是WebForm Views.

其他一切(控制器,插件组装加载等)似乎没问题.但是,我无法使嵌入式Razor视图正常工作.当我尝试浏览"HelloWorld/Index"时,出现以下错误:

The view at '~/Plugins/MyProjectPlugin.dll/MyProjectPlugin.Views.HelloWorld.Index.cshtml' must derive from WebViewPage or WebViewPage<TModel>.
Run Code Online (Sandbox Code Playgroud)

抛出异常 System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +262

如果需要,我可以包括完整的堆栈跟踪.

任何人都可以建议我可能做错了什么?

embedded-resource plugin-architecture razor asp.net-mvc-3

73
推荐指数
2
解决办法
5万
查看次数

Java插件框架选择

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

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

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

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

所以我们归结为JPF和JSPF.JPF似乎不再处于积极发展阶段.

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


更新:对此没有一定的正确答案..然而,我们将采用Pavol的想法,因为我们只需要一个非常非常简单的解决方案.感谢EoH的精彩导游.

java osgi plugin-architecture

59
推荐指数
2
解决办法
2万
查看次数

如何创建可插入的Java程序?

我想创建一个可以使用插件扩展的Java程序.我怎么能这样做,我应该在哪里寻找?

我有一组插件必须实现的接口,它应该在一个jar中.程序应该在相对(程序)文件夹中监视新的jar并以某种方式注册它们.


虽然我喜欢Eclipse RCP,但我认为这对我的简单需求来说太过分了.

对于Spring来说也是如此,但是无论如何我都要去看它,我不妨试试吧.

但是,我仍然希望找到一种尽可能简单的方法来创建自己的插件"框架".

java plugins plugin-architecture

37
推荐指数
4
解决办法
3万
查看次数

使用Adobe AIR构建插件体系结构

我正在考虑选择Adobe AIR作为即将推出的项目的客户端实现技术.(之前的选择是C#和WPF,但最近我对Flash/Flex/AIR印象非常深刻.)

但是我的产品最重要的功能之一将是它的插件架构,允许第三方开发人员以有趣的方式扩展功能和GUI.

我知道如何在C#中设计架构:插件加载器将枚举本地"app/plugins /"目录中的所有程序集.对于每个程序集,它会枚举所有类,寻找"IPluginFactory"接口的实现.对于工厂创建的每个插件,我会询问它的MVC类,并将其GUI元素(菜单项,面板等)捕捉到现有GUI布局中的相应插槽中.

我想在AIR中完成同样的事情(从本地文件系统加载插件,而不是从Web加载).阅读本文之后,我的理解是,它是可能的,并且基本架构(将SWF加载到沙盒ApplicationDomains等中)与您在.NET中的方式非常相似.

但我对这些陷阱感到好奇.

如果您有任何人使用Flash播放器进行任何动态类加载(最好是在混合flash/flex应用程序中,特别是在AIR主机中),我很想知道您构建插件框架的经验以及遇到棘手情况的地方使用Flash播放器,以及flash,flex和AIR API.

例如,如果有人问我同样的问题,但考虑到Java平台,我肯定会提到JVM没有"模块"或"程序集"的概念.最高级别的聚合是"类",因此在插件系统中创建用于管理大型项目的组织结构可能很困难.我还将讨论多个类加载器的问题,以及每个类加载器如何维护自己独立的加载类实例(具有自己独立的静态变量).


以下是一些仍未解决的具体问题:

1)actionscript"Loader"类可以将SWF加载到ApplicationDomain中.但该appdomain究竟包含什么?模块?类?MXML组件是如何表示的?如何找到实现我的插件界面的所有类?

2)如果您已将插件从主应用程序加载到单独的ApplicationDomain中,从其他应用程序域调用代码是否更加复杂?关于可以通过app -main域间编组层的数据类型是否有任何重要的限制?编组是否过于昂贵?

3)理想情况下,我想将自己的大部分主代码作为插件开发(主应用程序只是一个插件加载shell)并使用插件架构将该功能提升到应用程序中.这会让你内心感到害怕吗?

air flash flex3 plugin-architecture dynamic-loading

16
推荐指数
2
解决办法
3805
查看次数

Golang事件:插件架构的EventEmitter/dispatcher

在Node.js中,我能够使用EventEmitter轻松地创建一个WordPress克隆,从而将一个钩子系统复制并构建到CMS核心中,然后插件可以连接到该核心.

我现在需要为我的CMS写入并移植到Go的相同级别的可扩展性和核心隔离.基本上我现在已经完成了核心,但是为了使它真正灵活,我必须能够插入事件(钩子)并使插件附加到这些具有附加功能的钩子.

我不关心重新编译(动态/静态链接),只要你不必修改核心来加载插件 - 永远不应该修改CMS核心.(如WP,Drupal等)

我注意到有一些相当未知的项目,试图在Go中实现与Node.js中的EventEmitter类似的事件:

https://github.com/CHH/eventemitter

https://github.com/chuckpreslar/emission

由于上面的这两个项目没有得到太多人气和关注,我觉得这种思考事件的方式现在可能是我们应该如何在Go中做到这一点?这是否意味着Go可能不适合这项任务?通过插件制作真正可扩展的应用程序?

似乎Go没有将事件构建到其核心中,并且RPC似乎不是将插件集成到核心应用程序中的有效解决方案,就像它们本地构建一样,并且好像它们是主应用程序本身的一部分.

无缝插件集成到您的核心应用程序中的最佳方式是什么,无需扩展点(在核心中),而无需在每次需要连接新插件时操作核心?

extensibility go plugin-architecture eventemitter

11
推荐指数
1
解决办法
8013
查看次数

在基于注释的Spring Boot Application中实现插件架构

我想在Spring Boot应用程序中实现插件架构.让我解释一下我的情景.我有一个主应用程序,它启动服务器,管理安全性等.该应用程序就像我的最终产品的根,它将包括这个根应用程序和添加到其中的其他插件.

现在,这些插件本身就是Spring Boot应用程序,我可以通过动态搜索特定路径中的jar或者将它们作为库添加到项目依赖项中来添加到root应用程序.

插件有自己的配置,就像在主根应用程序中运行的应用程序一样.假设根应用程序运行服务器,插件应用程序可能包含为我的产品提供功能的所有控制器(端点),bean等.

这是前提,现在我想知道的是,

  1. 我怎样才能实现这种架构?
  2. root应用程序如何与插件通信?
  3. 他们会有单独的应用程序上下文吗?
  4. 如何从根应用程序启动和配置子应用程序?
  5. 当应用程序收到客户端的请求时,我如何将请求路由到特定插件内的特定控制器,因为我可能有很多插件.

我对这里的概念感到困惑,以及它是如何工作的.任何形式的帮助表示赞赏.如果有一些人可以提供的例子,那将是非常好的.

java spring spring-mvc plugin-architecture spring-boot

10
推荐指数
2
解决办法
7317
查看次数

创建插件,公开事件

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


我知道我应该使用:

$('#myPluginDiv').trigger('eventName', ["foo", "bar"]);
Run Code Online (Sandbox Code Playgroud)

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

events jquery-plugins plugin-architecture

9
推荐指数
1
解决办法
587
查看次数

C#DLL的插件架构

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

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

谢谢.

c# dll late-binding plugin-architecture

8
推荐指数
2
解决办法
1万
查看次数