用途:在 TypeScript 中应用工厂函数模式,实现干净的依赖注入与函数组合,适合在封装资源、为客户端或服务附加领域方法,以及重构混杂的客户端/服务/方法选项时使用。
主要能力:
- 统一签名:createSomething(dependencies, options?),第一个参数恒为资源(单个客户端或多个依赖的解构对象),第二个参数为该工厂专属配置,最多两个参数。
- 分层配置:客户端配置在客户端创建时传入,服务与方法各自保留独立选项,避免选项混杂。
- 反模式识别:禁止把客户端作为函数首参、隐藏客户端创建、合并多层选项、隐藏多层调用;应让每一层显式可见且可配置。
- 内部四区结构:区1不可变状态、区2可变状态、区3私有辅助函数、区4公开 API(恒在最后返回)。
- this 规则:返回对象内方法间调用用 this.method();既被返回方法又被初始化逻辑使用的函数放区3,按名称直接调用。
- 类型派生:优先用 ReturnType<typeof createX> 派生公开类型,而非手写重复类型,以保持 Go to Definition 跳转到真实成员。
- 结构契约:返回对象可结构化满足外部接口(如 SessionStore),无需适配器即可传入平台无关核心;仅做字段改名或透传的适配器应删除并拓宽工厂返回形状。
使用方式:按签名编写工厂,先创建客户端,再传入工厂创建服务,最后调用方法;多个依赖时以解构对象传入。参考文档提及可按需加载 references/single-or-array-pattern.md 与 references/sync-construction-render-gate.md。
适用场景:需要可测试(易于注入模拟客户端)、可复用(客户端在多个服务间共享)、各层独立配置、配置归属清晰的 TypeScript 代码库,尤其是客户端/服务/方法选项混杂的重构场景。
限制:资料未提供具体安装命令、版本要求、价格或性能数据,暂未提供。适配器何时保留或折叠需结合具体调用方判断,资料建议先用无适配器方案,确有必要再添加。