在Setuptools entry points 里会注册一个命名空间 ,它定义了插件代码所期望的API。 每一个 entry point 有一个名字,这个名字在命名空间里允许不唯一。 stevedore 管理类使用 pkg_resources
来应用匹配到的规则。
驱动———单一名字,单一entry point
驱动程序支持资源资源视图的抽象 ,因此应用程序可以使用不同类型的资源。 例如, 驱动程序可以连接到数据库引擎,加载不同的文件格式,或者与来自不同提供商的类似web服务进行通信。 对于给定的应用程序,可以使用许多驱动程序,但是在应用程序和驱动程序之间的接口中隐含着这样的情况,即只有一个驱动程序用于管理给定的资源。
驱动程序模式的示例包括 :
SQLAlchemy所使用的数据库客户端库
libcloud使用的云供应商API客户端
stevedore.driver.DriverManager
钩子 ——单一名字,多entry points
根据应用程序中发生的事件调用钩子、信号或回调。 应用程序的所有钩子可以共享单个名称空间(例如,my.application.hooks),并为触发事件使用不同的名称(例如,启动和预提交)。 多个入口点可以在名称空间中共享相同的名称,这样就可以在发生事件时调用多个钩子。
钩子模式的例子包括 :
扩展——多名字,多entry points
扩展应用程序的更一般的形式是通过发现附加模块来加载额外的功能,这些模块使用最小的API在运行时注
入自己。 扩展通常希望得到通知,它们已经被加载并正在被使用,因此它们可以执行初始化或设置步骤。 扩展可以替换核心功能或添加进去。
扩展模式的示例包括 :
stevedore.extension.ExtensionManager