SuperAPI AI 工具集

forze-deps-modules

编程与开发

查看项目

更新于 10-16 01:19

技能介绍

用途:编写或审查 Forze 的基础设施依赖装配。应用启动相关见 forze-wiring;逻辑名称与 StrEnum 路由值见 forze-specs-infrastructure。

容器模型:Deps 有两种注册模式。Deps.plain({DepKey: value}) 每个键一个提供者,适用于共享客户端、密钥、幂等默认值。Deps.routed({DepKey: {route: value}}) 每个键加路由,specs 按 spec.name 解析。Deps.routed_group({...}, routes={...}) 同一提供者服务多个路由,适用于一个后端支持多个逻辑资源。Deps.merge(...) 在重复 plain 键、plain 与 routed 冲突或重复 routed 键时抛出 CoreError,应快速失败而非静默覆盖。

模块形态:内置模块对 K: str | StrEnum 泛型化,调用方可用 StrEnum 名称。自定义模块实现 call 返回 Deps[K],构造 plain 与 routed 后合并。

依赖工厂:多数由 spec 支撑的适配器注册形如 def call(self, ctx, spec) 的工厂,应用代码以 route=spec.name 解析,再以 (ctx, spec) 调用。ExecutionContext 便捷方法在文档、搜索、缓存、计数器、存储、锁和嵌入场景内部完成该流程。

生命周期分离:DepsModule.call 保持纯粹轻量,只构建提供者而非网络连接;连接池与客户端在 LifecycleStep 函数中初始化(如 postgres_lifecycle_step、redis_lifecycle_step、s3_lifecycle_step 等)。

路由基础设施:多租户客户端时,将结构化客户端端口注册为 plain 依赖,由 routed 客户端在调用时选择具体连接。routed Postgres 客户端在目录元数据因租户/数据库而异时传 introspector_cache_partition_key。

反模式:在 usecase 中直接实例化适配器(应使用 deps 工厂与端口);新模块仅用字符串(路由类型保持 K: str | StrEnum);在 call 中打开连接(启动关闭归生命周期);多模块返回重叠键(构造前合并映射或用不同路由);存在多个 spec 时把 spec 支撑的提供者注册为 plain deps(应按 spec.name 用 routed deps)。