用途
该技能面向需要在软件设计中做出模式选择、设计 trait/接口/组件、确定抽象边界或评估依赖关系的场景。它提供针对常见技术栈的模式推荐,每条推荐都包含何时使用、何时避免以及权衡取舍。
主要能力
模式选择流程
- 识别问题:正在解决什么设计挑战?
- 考虑上下文:什么语言?什么规模?变更频率如何?
- 评估选项:2-3 个候选模式及其权衡。
- 推荐:针对该特定上下文的最佳匹配(而非“通用最佳模式”)。
黄金法则:模式是工具,不是目标。使用能解决问题的最简单模式。如果没有模式适合,普通函数或结构体也可以。
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,为当下构建,需要时重构。
- 金锤子:对所有事物使用相同模式/工具——为任务选择正确工具。
模式选择指南
当被问及“我应该使用哪种模式?”时:
- 描述问题(而非你认为适合的模式)。
- 识别约束(性能、可扩展性、团队规模、时间线)。
- 呈现 2-3 个选项及权衡。
- 推荐一个并给出清晰理由。
- 注明何时重新审视——“如果 X 变化,重新考虑 Y”。
使用方式
该技能由智能体在需要选择模式、设计 trait/接口/组件、决定抽象边界或评估依赖时调用。具体安装命令与调用方式暂未提供。
适用场景
- 在 Rust、TypeScript/React、Django/Python 项目中进行设计模式选型。
- 设计 trait、接口或组件时确定抽象边界。
- 评估依赖关系与架构决策。
- 识别并修正常见反模式。
限制
- 该技能提供模式建议与权衡分析,不替代具体项目上下文判断。
- 具体安装命令、调用方式、收费与价格信息暂未提供。
- 内容覆盖 Rust、TypeScript/React、Django/Python 技术栈,其他语言或框架的模式建议暂未提供。
集成
该技能与同一包中的 code-architect 技能(用于结构/架构评估)和 code-quality 技能(用于推动向模式重构的复杂度阈值)交叉引用。