SuperAPI AI 工具集

design-patterns

编程与开发

查看项目

更新于 10-16 02:11

技能介绍

用途

该技能面向需要在软件设计中做出模式选择、设计 trait/接口/组件、确定抽象边界或评估依赖关系的场景。它提供针对常见技术栈的模式推荐,每条推荐都包含何时使用、何时避免以及权衡取舍。

主要能力

模式选择流程

  1. 识别问题:正在解决什么设计挑战?
  2. 考虑上下文:什么语言?什么规模?变更频率如何?
  3. 评估选项:2-3 个候选模式及其权衡。
  4. 推荐:针对该特定上下文的最佳匹配(而非“通用最佳模式”)。

黄金法则:模式是工具,不是目标。使用能解决问题的最简单模式。如果没有模式适合,普通函数或结构体也可以。

Rust 模式

  • Newtype 模式:包装原始类型以增加类型安全与领域含义。适用于两个值底层类型相同但含义不同的情况;一次性使用且类型别名足够时应跳过。
  • Builder 模式:逐步构造复杂对象。适用于含大量可选字段、构造逻辑复杂的结构体;仅 1-3 个必填字段的结构体应直接用 new()。
  • Typestate 模式:在类型系统中编码状态转换,使非法状态不可表示。适用于具有明确状态转换的协议(连接、工作流、解析阶段);简单开关状态用布尔或枚举更清晰。
  • Trait 对象 vs 泛型:impl Trait(泛型)为静态分发、二进制更大、类型编译期已知;dyn Trait(trait 对象)为动态分发、二进制更小、运行时可扩展。性能重要、类型编译期已知、需要零成本抽象时用泛型;需要异构集合、插件系统或类型集合开放时用 trait 对象。
  • 错误处理模式:thiserror 用于库错误(结构化、具体变体);anyhow 用于应用错误(上下文丰富、快速传播);自定义枚举用于调用方需要穷尽匹配时。经验法则:库用 thiserror,应用用 anyhow。

TypeScript / React 模式

  • 复合组件:通过共享上下文隐式协作的组件。适用于含多个相关部分的复杂 UI 组件(菜单、手风琴、标签页);1-2 个元素的简单组件应跳过。
  • 自定义 Hook 组合:将行为提取并组合为可复用 Hook。适用于跨组件共享有状态逻辑、组件内复杂状态管理;不重复的一次性逻辑应跳过。
  • 可辨识联合:使用 TypeScript 联合类型进行类型安全的状态建模。适用于状态机、API 响应状态、表单状态等具有不同模式的情况;简单开关状态用布尔标志即可。
  • 状态管理决策树:UI 局部状态用 useState/useReducer;兄弟组件共享则提升到共同父级;远距离组件共享用 React Context;复杂状态逻辑用 useReducer + Context;服务端状态(API 数据)用 TanStack Query / SWR;全局应用状态用 Zustand / Jotai(新项目优先于 Redux)。

Django / Python 模式

  • 服务层:将业务逻辑与视图和模型分离。适用于涉及多个模型、外部调用或复杂验证的业务逻辑;无业务规则的简单 CRUD 应跳过。
  • 仓储模式(QuerySet 抽象):自定义管理器和查询集以封装查询逻辑。适用于复杂或可复用的查询逻辑、领域特定过滤;一次性查询或简单过滤应跳过。
  • 信号 vs 显式调用:Django 信号解耦、跨应用工作,但控制流隐藏、难以调试、存在顺序问题;显式调用可见、可调试、可测试,但模块间耦合。经验法则:真正横切关注点(审计日志、缓存失效)用信号;需要理解和测试流程的业务关键逻辑用显式调用。

反模式(所有技术栈)

  • 过早抽象:在模式重复出现前就抽象——等待 3 个实例后再提取。
  • 继承优于组合:深层继承层次、脆弱基类——优先组合(trait、Hook、mixin)。
  • 上帝对象:一个类/模块做所有事——按职责拆分(SRP)。
  • 霰弹式修改:一次变更需要编辑许多文件——将相关代码分组。
  • 特性依恋:函数使用另一个类的数据多于自身——将函数移到它依恋的类。
  • 投机性泛化:为可能永远不会出现的用例构建——YAGNI,为当下构建,需要时重构。
  • 金锤子:对所有事物使用相同模式/工具——为任务选择正确工具。

模式选择指南

当被问及“我应该使用哪种模式?”时:

  1. 描述问题(而非你认为适合的模式)。
  2. 识别约束(性能、可扩展性、团队规模、时间线)。
  3. 呈现 2-3 个选项及权衡。
  4. 推荐一个并给出清晰理由。
  5. 注明何时重新审视——“如果 X 变化,重新考虑 Y”。

使用方式

该技能由智能体在需要选择模式、设计 trait/接口/组件、决定抽象边界或评估依赖时调用。具体安装命令与调用方式暂未提供。

适用场景

  • 在 Rust、TypeScript/React、Django/Python 项目中进行设计模式选型。
  • 设计 trait、接口或组件时确定抽象边界。
  • 评估依赖关系与架构决策。
  • 识别并修正常见反模式。

限制

  • 该技能提供模式建议与权衡分析,不替代具体项目上下文判断。
  • 具体安装命令、调用方式、收费与价格信息暂未提供。
  • 内容覆盖 Rust、TypeScript/React、Django/Python 技术栈,其他语言或框架的模式建议暂未提供。

集成

该技能与同一包中的 code-architect 技能(用于结构/架构评估)和 code-quality 技能(用于推动向模式重构的复杂度阈值)交叉引用。