delphi - 插件/插件依赖如何工作?

标签 delphi plugins

我有一个关于软件插件系统实际操作的非常基本的问题。我了解简单的插件设计是如何工作的,即插件添加到托管应用程序的设计。例如,插件向绘画程序添加新的过滤器。主机知道它必须调用插件提供的名为过滤器的方法。在这种情况下,所有插件都是独立的。

我的问题涉及一个插件可以使用另一个插件中的设施的情况。例如,可能有一个插件提供绘制数据的能力,而另一个插件则生成数据。如果数据生成器插件之前从未见过图形插件,我认为它无法知道在图形插件中调用哪些方法。我认为在这些情况下,数据生成器插件的开发人员必须能够以抽象类或接口(interface)的形式访问图形插件 API 的描述。这就是插件依赖关系的运作方式吗,即插件明确了解其他插件可能拥有的 API?

我刚刚构建了这样一个插件系统,为了使插件能够使用其他插件,我将其包含在每个插件需要了解的插件接口(interface)的源代码副本中。这种方法的问题在于,如果出现新的绘图插件但具有不同的 API,则数据生成器插件在不首先重新编译以了解新 API 的情况下无法使用它。这对我来说似乎不对。

我知道这似乎是一个非常简单的问题,并且有一个明显的答案,但我花了几个小时在互联网上搜索,但没有找到关于这个问题的明确声明。

最佳答案

如果您的“新绘图插件”具有与您的代码所了解的 API 不同的 API,则别无选择,只能让您的代码了解此 API。

如果您可以控制所有这些,包括各种绘图插件,那么您应该指定所有绘图插件都需要实现/支持的标准绘图 API。这大约是您可以为某些任务使用不同的提供程序(插件)的唯一方法。

标准“语言”是确保您可以使用接口(interface)的多个实现者(服务提供者)的方法。这也是您可以拥有同一界面的多个用户(服务的使用者)的方式。

对一个任务的多个提供者以及一个提供者的多个使用者的需求/愿望可能导致了 OAuth 等标准以及 HTTP、SMTP 等协议(protocol)的创建。

关于delphi - 插件/插件依赖如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208977/

相关文章:

delphi - 如何让管理员设置用户无法更改的程序选项?

windows - 如何在 64 位 Windows 7 上将 Clear Case 与 Windows 资源管理器集成

node.js - 如何在不使用命令 npm 的情况下向 cordova/phonegap 应用程序添加插件?

c# - 有哪些工具可以将 Delphi 7 应用程序转换为 C# 和 .Net 框架?

delphi - 扩展TWebBrowser外部对象来执行Delphi代码: how to access my form components?

c++ - Varargs类方法头转换错误

delphi - 如何从 Bits 数组创建 Bitmap32?

php - 是否可以从插件扩展 Wordpress XMLRPC 接口(interface)?

Java 插件 7u40 在离开带有另一个小程序的页面后无法加载小程序

email - 使用邮件插件在Grails中邮寄GSP