Plugins Python插件体系结构:使用多态性还是导入挂钩?

Plugins Python插件体系结构:使用多态性还是导入挂钩?,plugins,architecture,module,webserver,polymorphism,Plugins,Architecture,Module,Webserver,Polymorphism,我想搜索几个外部网站的模式,并希望一个共同的界面键入一次,并收集在同一个视图中的所有结果。因此,我目前正在构建一个项目,其中包括一个web服务器,用于用户界面,可以向其他网站发送请求 我计划使用瓶子或烧瓶来实现快速的底层web服务器功能,并希望采用插件架构 因为我不知道我现在要访问多少个网站,而且每个网站的解析都会有所不同,信息量也会有所不同,所以我希望每个插件添加都需要尽可能少的代码。只有解析过程。例如,添加要访问的新网站不得要求修改所有数据模型、视图模板等 所以,我在考虑一个核心程序向模块发

我想搜索几个外部网站的模式,并希望一个共同的界面键入一次,并收集在同一个视图中的所有结果。因此,我目前正在构建一个项目,其中包括一个web服务器,用于用户界面,可以向其他网站发送请求

我计划使用瓶子或烧瓶来实现快速的底层web服务器功能,并希望采用插件架构

因为我不知道我现在要访问多少个网站,而且每个网站的解析都会有所不同,信息量也会有所不同,所以我希望每个插件添加都需要尽可能少的代码。只有解析过程。例如,添加要访问的新网站不得要求修改所有数据模型、视图模板等

所以,我在考虑一个核心程序向模块发送和接受有限数量的通用函数。核心的信息类型有限,每个模块都能够提供部分或所有这些类型

我真正的问题是:我应该使用OOP多态性还是imp模块加载源来使用我的模块

每个模块都可以是从通用模块类构建的类,或者每个模块都可以是独立的,并且包含内核可以使用的函数,使用imp.load_source调用它们。第二个选项使我想到导出DLL函数,以便在C/C++程序中使用它们

我一直在读,真的很有趣,我还在想我的情况下,子类是否更好


谢谢你的建议

您的问题实际上由两部分组成:

找到可用的插件并加载其源代码。 缩写为e。配置和利用你的插件。 多态性问题与后者有关。因此,您建议的两种方案都有可能: 使用imp.load_source获取多态子类,该子类可以在以后使用插件之前进行配置

但我建议第一部分使用的标准机制,因为:

加载插件时没有冲突或缺少需求, 即使插件本身具有其他动态依赖性,为什么要将下游程序员限制为单片设计 在sys.path或plugin dir中安装和删除软件包时,保持可用插件列表的更新, 任务与语言的包装和分发系统密切相关。 从长远来看,基于分发/打包的解决方案始终是插件更可靠的选择

如果你看一下这个为比较各种插件架构而精心设计的插件,你会注意到所需的代码几乎比其他插件要小,而它完成的工作要多得多