当前位置: 首页 > ds >正文

【代码坏味道】无用物Dispensables

💬 Comments(注释过多)

🧾 症状

  • 方法中充满了解释性注释。

🧠 问题原因

  • 作者意识到代码不易懂,靠注释来“掩盖”结构不清的问题。

🛠️ 应对方法

  • 用好名字代替注释:好名字胜过好注释
  • 提取变量 拆解复杂表达式。
  • 提取方法 将代码块抽出来,方法名直接体现注释内容。
  • 如果方法名仍不够清晰,使用 重命名方法
  • 需要说明状态约束时,使用 引入断言

✅ 收益

  • 代码更加直观清晰,无需依赖注释也能懂。

🔁 Duplicate Code(重复代码)

🧾 症状

  • 两段代码看起来几乎一样。

🧠 问题原因

  • 程序员之间没沟通好,重复造轮子;
  • 或者赶工时复制粘贴了代码。

🛠️ 应对方法

场景处理方法
同一个类中多个方法重复提取方法
同层级两个子类中重复提取方法 + 上移字段
构造函数中重复上移构造函数体
类似但不完全相同模板方法
不同算法做同一事替换为最佳算法
不同类中重复提取超类或提取类
条件判断中重复执行合并条件表达式或提取方法
条件分支中都有相同代码合并重复的条件片段

✅ 收益

  • 代码更短小精悍
  • 更易维护和复用。

💤 Lazy Class(懒类)

🧾 症状

  • 类几乎没什么作用,但还存在。

🧠 问题原因

  • 可能是之前重构后变得空了;
  • 也可能是为“将来可能的功能”留的坑,结果没填。

🛠️ 应对方法

  • 内联类 删除它;
  • 或者 合并继承结构 把它合并掉。

✅ 收益

  • 减少冗余类,代码更简洁,维护负担更小。

📦 Data Class(数据类)

🧾 症状

  • 只有字段、getter/setter,没有任何逻辑。

🧠 问题原因

  • 只当数据容器用,没有行为逻辑;
  • 忽略了“对象应该操作自己的数据”这一点。

🛠️ 应对方法

  • 封装字段,防止外部随意访问;
  • 封装集合,避免直接操作集合;
  • 客户端有逻辑的,迁移过来用 提取方法 / 移动方法
  • 去掉多余访问方法,使用 移除设置方法隐藏方法

✅ 收益

  • 数据与操作结合,更面向对象;
  • 客户端代码更清爽。

🪦 Dead Code(无用代码)

🧾 症状

  • 某些变量、方法、类再也没用到。

🧠 问题原因

  • 改需求时没人清理旧代码;
  • 有些分支永远执行不到。

🛠️ 应对方法

  • 用 IDE 找无用代码;
  • 删除参数内联类折叠继承结构都可用。

✅ 收益

  • 精简代码,维护成本下降

🧠 Speculative Generality(推测性泛化)

🧾 症状

  • 出现了一些“可能将来会用”的类、方法、字段,但现在根本用不到。

🧠 问题原因

  • 提前设计了很多“保底方案”,但未来功能没做成。

🛠️ 应对方法

类型处理方法
未用抽象类折叠继承结构
多余委托类内联类
未用方法内联方法
未用参数移除参数
未用字段直接删除

✅ 收益

  • 代码精简,避免“写给未来的幽灵功能”。

⚠️ 可忽略情况

  • 开发框架时,保留给“用户未来扩展”的 API 是合理的;
  • 删除前确认不是测试代码依赖。

http://www.xdnf.cn/news/10480.html

相关文章:

  • 【Qt】EventFilter,要增加事件拦截器才能拦截到事件
  • CppCon 2014 学习:Practical Functional Programming
  • 给跑步入门的一个训练课表
  • RAGFlow从理论到实战的检索增强生成指南
  • Excel如何去除公式保留数值
  • 知识管理五强对比:Baklib高效突围
  • 10000+套PPT模版合集和简历模版 【多种系列风格】免费下载
  • Python 全面技术指南:从语言本质到工程实践
  • 第六十三节:深度学习-模型推理与后处理
  • 流媒体协议分析:流媒体传输的基石
  • MCP架构全解析:从核心原理到企业级实践
  • java开发中#和$的区别
  • 「 扑翼飞行器 」悬停飞行的信号串联滤波器设计
  • leetcode hot100刷题日记——31.二叉树的直径
  • 【计算机CPU架构】ARM架构简介
  • 差分隐私-扰动机制
  • Redis 常用数据类型和命令使用
  • Go语言的原子操作
  • 告别压降损耗与反向电流困扰:汽车电子电源防反接方案全面解析与理想二极管应用
  • 桥 接 模 式
  • 导入Maven项目
  • 人工智能在智能供应链中的创新应用与未来趋势
  • 数的划分--dfs+剪枝
  • 配置前端控制器
  • 【Hot 100】121. 买卖股票的最佳时机
  • 【优比】基于STM32的紧急求助定位导盲仪系统
  • python打卡训练营打卡记录day41
  • 26考研——文件管理_文件目录(4)
  • Java内存模型(JMM)与多线程编程实战
  • 【小米拥抱AI】小米开源 MiMo-7B-RL-0530