我有一个关于软件插件系统实际操作的非常基本的问题。我了解简单的插件设计是如何工作的,即插件添加到托管应用程序的设计。例如,插件向绘画程序添加新的过滤器。主机知道它必须调用插件提供的名为过滤器的方法。在这种情况下,所有插件都是独立的。
我的问题涉及一个插件可以使用另一个插件中的设施的情况。例如,可能有一个插件提供绘制数据的能力,而另一个插件则生成数据。如果数据生成器插件之前从未见过图形插件,我认为它无法知道在图形插件中调用哪些方法。我认为在这些情况下,数据生成器插件的开发人员必须能够以抽象类或接口(interface)的形式访问图形插件 API 的描述。这就是插件依赖关系的运作方式吗,即插件明确了解其他插件可能拥有的 API?
我刚刚构建了这样一个插件系统,为了使插件能够使用其他插件,我将其包含在每个插件需要了解的插件接口(interface)的源代码副本中。这种方法的问题在于,如果出现新的绘图插件但具有不同的 API,则数据生成器插件在不首先重新编译以了解新 API 的情况下无法使用它。这对我来说似乎不对。
我知道这似乎是一个非常简单的问题,并且有一个明显的答案,但我花了几个小时在互联网上搜索,但没有找到关于这个问题的明确声明。
最佳答案
如果您的“新绘图插件”具有与您的代码所了解的 API 不同的 API,则别无选择,只能让您的代码了解此 API。
如果您可以控制所有这些,包括各种绘图插件,那么您应该指定所有绘图插件都需要实现/支持的标准绘图 API。这大约是您可以为某些任务使用不同的提供程序(插件)的唯一方法。
标准“语言”是确保您可以使用接口(interface)的多个实现者(服务提供者)的方法。这也是您可以拥有同一界面的多个用户(服务的使用者)的方式。
对一个任务的多个提供者以及一个提供者的多个使用者的需求/愿望可能导致了 OAuth 等标准以及 HTTP、SMTP 等协议(protocol)的创建。
关于delphi - 插件/插件依赖如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208977/