如何为同一资源组合插件?

How to combine pulgins for the same resource?

我在一个项目的逻辑架构中工作,该项目从用户那里接收一些信息并对其进行处理。其中一项要求是为外部开发人员公开接口以添加更多功能。到目前为止,我提出了一个 MVC 2 层架构,其中 View 和 Controller 运行 在用户机器中,而 Model 托管在应用程序服务器中并被远程调用。对功能的要求建议我使用插件模式。

在处理信息时可能会执行用户选择的其他步骤,因此我想将它们建模为应用程序发布时已经存在的插件。这意味着这个插件会影响相同的资源(处理流程),我不确定当两个插件都启用时如何处理这个问题。

因为我不像其他模式那样熟悉插件模式,所以我在提问之前所做的阅读让我尝试了类似于抽象工厂模式的东西。问题是,当启用两个或多个插件时,我将需要多重继承。我也想到了Builder模式来分别建模处理的步骤,但是这样就必须定义插件之间的顺序,这会影响插件开发人员的独立性。

如果我没理解错的话,你希望能够用多个独立的插件来扩展同一个变体点。如果是这样,pipes and filters pattern 是一种合适的机制

使用这种方法,插件代表过滤器,您可以设计一个插件容器来加载然后链接它们。如果没有为给定的变化点加载插件,那么您要么将变化点短路,要么提供某种形式的默认过滤器。

此外,为插件提供一种机制来指定它们在过滤器链中的位置会有所帮助,因此在设计插件界面时请考虑这一点。