Python插件体系结构:使用多态性或导入挂钩



我想在几个外部网站上搜索一个模式,并希望有一个通用界面来键入一次,然后在同一视图中收集所有结果。因此,我目前正在构建一个项目,该项目由一个能够向其他网站发送请求的网络服务器(用于用户界面)组成。

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

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

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

我真正的问题是:我应该使用OOP多态性还是imp模块(load_source)来使用我的模块?

每个模块可以是一个从通用模块类构建的类,或者每个模块都可以是独立的,并且包含核心可用的函数,用imp.load_source()调用它们。第二个选项让我考虑导出DLL函数,将其与C/C++程序一起使用。

我一直在读这篇文章,真的很有趣,我仍然想知道在我的情况下,子类是否更好?

谢谢你的建议!

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

  1. 找到可用的插件并加载它们的源代码
  2. 初始化(即配置)并使用您的插件

"多态性"问题与后者有关。因此,有可能同时拥有您的建议:使用imp.load_source来获得一个多态子类,该子类可以在以后使用插件之前进行配置。

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

  • 在没有冲突或缺少需求的情况下加载插件
  • 即使插件本身具有其他动态依赖关系(为什么要将下游"程序员"限制为单片设计?),以及
  • 并且在从CCD_ 2或插件目录安装和移除包时保持可用插件的列表更新

是与语言的包装和分发系统密切相关的任务。从长远来看,基于分发/打包的解决方案对于插件来说总是一个更可靠的选择。

如果你仔细看一下这个为比较各种插件体系结构而设计的示例应用程序,你会注意到所需的代码几乎比其他代码小,但它能完成更多。

最新更新