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