CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
代码质量与工程实践/课时/代码坏味道
RawBlame
课时目录12 节

代码质量与工程实践

  1. 01代码质量是什么
  2. 02代码审查
  3. 03重构基础
  4. 04代码坏味道
  5. 05文档生成
  6. 06风格与规范
  7. 07Pull Request 流程
  8. 08质量与测试
  9. 09静态分析工具
  10. 10技术债务
  11. 11团队规范
  12. 12综合练习

代码坏味道

长方法、重复、过大类。

30 分钟

代码坏味道

Martin Fowler 把 代码坏味道(Code Smell) 定义为:不一定会 bug,但暗示设计有问题、改动成本偏高。识别 smell 不是为批评作者,而是为 选对重构时机与手法。

学习目标

  • 识别长方法、重复代码、过大类等常见坏味道
  • 能将 smell 映射到具体重构策略
  • 结合 cq-refactoring 小步改善

长方法(Long Method)

信号:一个方法超过一屏、多层缩进、注释写「第一步…第二步…」。

风险:难以单测、难以理解、改一处牵动全局。

对策:Extract Method;保留方法名表达业务步骤。Controller 里若塞满校验与组装,应对照 spring-boot-essentials 下沉到 Service。

重复代码(Duplicated Code)

信号:复制粘贴、仅变量名不同的三份校验。

风险:修 bug 漏改一处;行为逐渐分叉。

对策:提取函数/基类/工具类;重复的是 业务规则 时优先抽 Domain 方法而非 StringUtils。Review 时用 cq-reviews 清单里的「重复」项。

过大类(Large Class)

信号:一个类几百行、字段十几個、改任何需求都要动它。

风险:违反单一职责;测试需 mock 半个系统。

对策:按职责拆类(如 ReadService / WriteService);配合 testing-essentials 为拆分后的小类写单元测试。

其他常见 smell(速览)

Smell简要对策
过长参数列引入参数对象
发散式变化拆类,各管一种变化原因
依恋情结搬移方法到更合适的类
注释过多先改善命名,注释只留非 obvious 业务

AI 生成代码易 重复模板 与 巨型方法,用 ai-coding-essentials 审查时专门扫 smell。

练习

  • 在 platform 或 backend 标出 1 处长方法,写出可提取的 2 个子方法名
  • 用 grep 或 IDE 找同一字符串出现 ≥3 次的校验逻辑
  • 选一个过大类,列出它承担的 3 种以上「变化原因」

小结

坏味道是重构的导航标,不是羞耻标签。 下一课谈文档:如何让 README 与 API 说明减轻「读代码才能懂」的负担。

加载本节练习…
← 上一课重构基础下一课 →文档生成