问题标签 [plugin-pattern]

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 投票
1 回答
5332 浏览

java - Java 插件模式

我是一名 Java 初学者,如果有人能解释如何在 Java 中实现 Martin Fowler 的插件模式,我将不胜感激。

提前致谢。

0 投票
1 回答
595 浏览

c# - 创建可以通过插件/模块扩展的 Web 应用程序

我目前正在开发一个类似 C# CMS 的 Web 应用程序,该应用程序将用于标准化我们的网站开发。从一开始,我们的想法就是让核心尽可能简单,以避免困扰许多 CMS 系统的复杂性和菜单/选项过载。这个简单的核心现在已经完成并且运行良好。

我们设想系统将能够接受插件或模块,这些插件或模块将扩展核心功能以满足给定项目的需求。这些也可以跨项目重复使用。例如,可能需要基本目录和购物篮。此类扩展的所有代码都应位于单独的程序集中。他们应该能够从这个库中提供自己的管理界面和前端代码。系统应搜索可用插件,并为管理员用户提供启用/禁用该功能的选项。(这都非常像 WordPress 插件)

以正确的方式解决这个问题是至关重要的,所以我试图在加入之前尽可能多地进行尽职调查。

我知道插件模式 ( http://msdn.microsoft.com/en-us/library/ms972962.aspx ) 并阅读了一些关于它使用的文章。这似乎是合理的,但我不相信它一定是这种情况下的正确/最佳技术。它似乎更适合处理应用程序(图像/音频处理、数学等)。

是否有任何其他选项可以实现这种 UI 可扩展性功能?或者插件模式是要走的路?

如果有人链接到解释为此目的使用插件模式的文章,我也会感兴趣?

0 投票
3 回答
2104 浏览

javascript - 像 jQuery 这样的 Javascript 插件设计模式

有人可以用javascript写一个非常简单的基本示例来概念化(并希望让我理解)jQuery插件设计模式是如何完成的以及它是如何工作的?

我对如何为 jQuery 创建插件不感兴趣(所以这里根本没有 jQuery 代码)。我对一个简单的解释感兴趣(可能有一点 Javascript 代码)来解释它是如何完成插件概念的

请不要回复我去阅读jQuery代码,我试过了,但我太复杂了,否则我不会在这里发布问题。

谢谢!

0 投票
4 回答
676 浏览

c++ - 带有 .dll 的插件模式。如何从 dll 中提取插件接口?

我有一个应该以插件模式实现的应用程序。
插件位于 dll 文件中,我正在动态加载它们,具体取决于用户通过命令行提供的参数。也就是说,如果用户想要使用 plugin1,他在运行应用程序时在命令行中键入该名称作为参数,我应该动态加载它。
因为我使用的是插件模式,所以我有一个接口(因为在 c++ 中工作,它是一个抽象类),所有插件类都实现了它。
我的困境是把接口类放在哪里?为了构建 dll,我必须在每个 dll 中声明接口。
当需要更改接口时,我想避免更改所有 dll 中的接口。
另一方面,如果我在主应用程序中声明接口类,我的 dll 不会被编译和构建?
你有关于如何从dll中提取接口类并将其放在主应用程序中的建议,所以当我想更改它的代码时,不需要在十几个地方更改它(即在每个dll中) )。

提前致谢,

干杯

0 投票
2 回答
433 浏览

jquery - 使用“live”的 jQuery 插件模式

我有很多关于编写面向对象的 javascript 代码和开发 jQuery 插件的文章,到目前为止一切都很好,我了解它们是如何工作的,我可以创建自己的插件。

但是,所有文章都存在一个问题(即使有官方插件创作指南 - http://docs.jquery.com/Plugins/Authoring) - 这些所有模式都不支持“实时”。

让我们以这种模式为例 - http://www.virgentech.com/blog/2009/10/building-object-oriented-jquery-plugin.html

将在每个 jQuery 匹配对象上创建新的“MyPlugin”实例。

如何更改它(如果可能的话)以使其适用于将来添加的元素?

谢谢

0 投票
1 回答
750 浏览

c# - 在哪里可以找到 ASP.NET MVC 插件模式的介绍?

我试图弄清楚如何用 asp.net mvc 实现“插件”框架。我做了一些阅读,发现很多人推荐 MEF 用于 asp.net mvc 中的插件框架。

链接:http ://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-%28MEF%29.aspx

但是,我遇到了无法使用ViewModels其他基本 mvc 组件的问题。我知道现在我有点过头了。我正在寻找有关插件模式的教程、书籍和示例,但我找不到任何东西。而且,我发现的大多数 MEF 文档都让我有点头晕(codeplex),或者是几年前在 .NET 4 中发布 MEF 之前的文档。

任何方向/帮助将不胜感激!!!我不是在寻找 MEF 的独家信息。我一直专注于 MEF,因为它是实际 .NET 框架的一部分。我不知道它是否可以处理我正在寻找的东西。

你能推荐任何关于这个主题的中级资源吗?

0 投票
3 回答
5814 浏览

c# - C#中的插件模式

问题:
我正在构建一个接受文件、翻译执行文件的框架。该框架应该能够处理任何类型的文件,为此我提供了一种上传 DLL 的方法,该 DLL 包含用于翻译执行文件的类和方法。我正在寻找的是定义插件界面的最佳方式

解决方案 A:
定义一组公开可用的接口。插件应该实现这些接口。

解决方案 B:
定义一些公开可用的抽象类。插件应该继承和覆盖这些类的抽象方法。

解决方案 C: rcravens
在代码内部传递接口,创建一个公开可用的抽象类以允许插件扩展。选择
这个解决方案是在接口之前选择的,只是因为它支持基本实现(在这种情况下很方便)。之所以在抽象类之前选择它,只是因为它可以在代码中进行模拟。组合框架非常好,但是对于像这个只需要有限可扩展性的应用程序这样轻量级的东西来说有点过头了。

解决方案 D: JayChris Shain
实现一个组合框架(例如Managed Extensibility Framework(MEF))并围绕它进行构建

如果出现任何新的解决方案,我会将它们添加到此列表中。答案将交给最能证明其解决方案合理性的人(可能具有优势和局限性)

在此先感谢,
技术测试伙计

0 投票
1 回答
1333 浏览

javascript - 具有数据持久性的 jQuery 插件模式

我正在开发一个 jQuery 插件,但我在设计模式上遇到了一些问题,它结合了 jQuery最佳实践中的默认值和选项、数据和命名空间技术。这是我的代码的抽象版本:

如果您使用最新版本的 jQuery 运行该代码,您会看到我同时调用了initandmethodname函数并在每个函数中记录了settingsanddata对象。在methodname调用中,我可以同时访问settingsand data,但在init调用本身中,data对象返回未定义。如果我在脚本的第 21 行设置断点,我可以在控制台中回调data对象。$this.data('pluginname')有人看到我在这里做错了吗?我应该能够data.key3在 init, 函数中编写,对吧?

0 投票
3 回答
2504 浏览

c# - 没有接口的 C# 插件模式

我遇到了实现一个插件模式的需要,它不适合我在其他地方看到的任何东西,我只是想知道我是否以错误的方式看待它,或者其他人是否遇到过同样的问题并且可能有一个解决方案。

本质上,我们有一个由核心组件和许多插入其中的模块组成的系统。一些模块依赖于其他模块,但需要不时删除或替换其中一些依赖项,我想尽可能避免重新编译。

该系统是定制的 CMS,模块是在 CMS 中提供功能的插件。例如,我们有一个评论模块和几个可以包含评论功能的内容模块,例如新闻模块、博客模块等。我的问题是一些客户可能不会购买评论模块,所以我需要找到一种方法来防止依赖模块依赖于评论模块的存在,并且在某些情况下,可能需要满足修改版本评论模块。

我们在运行时加载模块,目前,为了避免模块之间的相互依赖,我们使用核心 CMS 程序集中的接口来处理这个问题。我担心的是,为了避免每次创建可能存在依赖关系的新模块时都必须修改核心 CMS 程序集,我需要使用比接口和这些接口的实现更宽松的东西。

我正在考虑以下几点:

  • 核心程序集包含一个允许注册和注销共享输入/输出消息的对象(例如“Comments.AddComment”或“Comments.ListComments”)
  • 加载模块时,它们会宣传它们需要的服务和它们提供的服务(例如,新闻模块需要“Comments.AddComment”消息,而评论模块的任何变体都将提供“Comments.AddComment”消息)。
  • 传递给这些消息的任何对象或数据都将从一个非常松散的基类继承或实现一个接口,该接口公开包含在核心程序集中的 IDictionary 类型的属性。或者,消息的合同只需要一个对象类型的参数,我将匿名对象从提供者/消费者传递给它们。

缺点显然是失去了强类型,但优点是我不依赖严格的接口实现或要求包含在运行时可能不存在的模块。

插件通过反射加载,检查引用的程序集并寻找实现给定接口的类。MEF 和动态类型不是一个选项,因为我仅限于 .NET 3.5。

任何人都可以提出更好的建议,或者对这个问题有不同的思考方式吗?

0 投票
1 回答
1203 浏览

android - Android 插件模式

我将在我的 Android 应用程序中实现插件模式。

现在我已经创建了:

例如,在外部插件中

PluginReceiver类还包含一些方法,如getIcon,getName等等。

SmsPluginReceiver注册AndroidManifest.xml为具有指定意图过滤器操作的接收器:

在主应用程序中,我正在搜索所有可用的插件PackageManager

我得到了一个ResolveInfo对象。

我完全不知道我应该用它做什么 - 如何访问SmsPluginReceiver数据(图标、名称、...)?