bad-smell · git:20261030.60282cf · 2026-10-30 · sha256 cee3b06649c4f57a
bad-smell git:20261030.60282cfA
Immutable. This exact content never changes and is served at /api/v1/blob/cee3b06649c4f57a.
---
name: bad-smell
description: 识别到代码坏味道时,阅读本技能并及时重构。例:重复代码,过长函数,过大的类,过长参数列,数据泥团,依恋情结,基本类型偏执,重复的 Switch,拒绝遗赠,发散式变化,霰弹式修改。
user-invocable: true
---
# bad-smell
检查代码是否有以下坏味道:
- 代码臃肿
- 重复代码(Duplicated Code):多个地方有结构相似的代码,复制粘贴导致修改时容易遗漏。
- 过长函数 / 方法(Long Method):一个函数写了成百上行,逻辑复杂,难以理解。
- 过大的类(Large Class):一个类承担了太多职责,内聚性差。
- 过长参数列(Long Parameter List):函数参数过多(通常超过5个),调用和阅读都很吃力。
- 数据泥团(Data Clumps):总是一起出现的几个数据项(如一些字段总是结伴出现在不同的类或方法中),应封装成对象。
- 面向对象滥用
- 依恋情结(Feature Envy):某个函数对另一个类的兴趣远高于自己所处的类,频繁调用别人的数据。
- 基本类型偏执(Primitive Obsession):过度使用基本数据类型(如用字符串或整型表示复杂的业务概念,而不是封装成对象)。
- 重复的 Switch(Repeated Switches):到处是相同的 switch-case 或 if-else 条件分支,扩展新类型时需要修改多处。
- 拒绝遗赠(Refused Bequest):子类继承了父类,却不实现或不需要父类的方法和数据。
- 变更时的阻碍
- 发散式变化(Divergent Change):一个类经常因为不同的原因在不同的方向上发生修改(说明职责太杂)。
- 霰弹式修改(Shotgun Surgery):每遇到一个微小变化,就得到处修改许多个不同的类。
项目当前处于早期开发阶段。**架构债务越早处理越好。**
若你能“嗅到”明显更优的设计,且范围可控无风险,请立刻随手优化、重构。
如果重构范围较大、风险较高或需要进一步规划,请在 `{project_root}/docs/freeform/yymmdd-{summary}.smell.md` 简单记录你发现的坏味道,然后回到原有任务。