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

【代码坏味道】变更阻碍者Change Preventers

🔀 Divergent Change(分歧性修改)

🛑 什么是它?

当你修改一个类的时候,发现这个类里很多不相关的方法都要改,就说明这个类的职责太杂了!

🧠 举个例子:你加一个产品类型,却要修改同一个类中用于查找、显示、下单的多个方法。

🤔 为什么这是个问题?

  • 类承担太多职责,不同功能混在一起。
  • 一改功能,牵一发动全身,容易出错。

🛠️ 怎么改?

  • ✂️ 提取类(Extract Class):把不同职责分到不同类中。
  • 🧬 如果多个类功能重复:用继承整理结构(提取父类或子类)。

✅ 有什么好处?

  • 类的职责清晰。
  • 代码更易维护、不会重复劳动。
  • 更容易定位问题或添加新功能。

🔫 Shotgun Surgery(霰弹手术)

🛑 什么是它?

你要加个新功能或改个逻辑,结果需要同时改好几个类里的一小部分,像打霰弹枪一样“到处改”。

🧠 举个例子:想改个价格逻辑,结果 Product 类、Cart 类、Order 类都要动。

🤔 为什么这是个问题?

  • 一个小改动却要遍地找代码,改起来特别麻烦。
  • 说明职责被拆得太散,模块划分不合理。

🛠️ 怎么改?

  • 🚚 移动方法/字段(Move Method/Field):把散落的代码收进一个合适的类。
  • 🧹 如果原来的类因此空了,直接删掉(内联类 Inline Class)。

✅ 有什么好处?

  • 所有相关代码集中到一处。
  • 改代码不再“打散弹”,维护轻松!

🧱 Parallel Inheritance Hierarchies(并行继承层次结构)

🛑 什么是它?

当你给某个类添加一个子类时,发现另一个相关的类也必须添加对应的子类,两个继承结构就像“并排走路”。

🧠 举个例子:

  • Animal -> Cat, Dog
  • 同时 AnimalSoundPlayer -> CatSoundPlayer, DogSoundPlayer

只要新增 Fish,两个类体系都要加一层,改动代价越来越大!

🤔 为什么这是个问题?

  • 类与类之间强耦合,扩展一个就要成对扩展,麻烦大。
  • 系统越来越复杂、难维护。

🛠️ 怎么改?

  • 🧲 第一步:让一个类的对象引用另一个类的对象。
  • 🧹 第二步:把重复逻辑合并,移除冗余的继承结构(用 Move Method/Field)。

✅ 有什么好处?

  • 继承关系更简单。
  • 减少冗余、结构清晰。

❎ 什么时候可以忽略?

  • 如果你尝试精简结构,结果代码变得更乱,那就先别改了。
  • 有时候两个并行结构反而是更清晰的选择。

✅ 小结:这些“坏味道”该怎么处理?

坏味道类型问题表现推荐做法
分歧性修改 Divergent Change一个类里要改很多不相关方法提取类、提取子类/父类
霰弹手术 Shotgun Surgery一个改动要修改很多类移动方法或字段,集中代码,必要时删掉类
并行继承结构 Parallel Hierarchies每新增一个子类,多个类都得配套加子类合并继承结构,移除多余子类或改为组合方式

相关文章:

  • Tomcat的整体架构及其设计精髓
  • MAC软件游戏打开提示已损坏
  • 通义灵码深度实战测评:从零构建智能家居控制中枢,体验AI编程新范式
  • azure web app创建分步指南系列之二
  • CSS专题之水平垂直居中
  • Redis最佳实践——安全与稳定性保障之高可用架构详解
  • Ubuntu22.04通过命令行安装qt5
  • ubuntu20.04.5-arm64版安装robotjs
  • 在Ubuntu20.04上安装ROS Noetic
  • ubuntu20.04.5--arm64版上使用node集成java
  • Ubuntu搭建DNS服务器
  • 【Ubuntu】摸鱼技巧之虚拟机环境复制
  • 配置远程无密登陆ubuntu服务器时无法连接问题排查
  • 第六十三节:深度学习-模型推理与后处理
  • 使用Java实现简单的计算机案例
  • 系统是win11+两个ubuntu,ubuntu20.04和ubuntu22.04,想删除ubuntu20.04且不用保留数据
  • 数据库运维管理系统在AI方向的实践
  • 【Github/Gitee Webhook触发自动部署-Jenkins】
  • 实现MPC钱包
  • [蓝桥杯]拉马车
  • 线下广告宣传方式有哪些/优化大师破解版app
  • 自己做网站系统首选平台/看网站搜索什么关键词
  • wordpress在线邮箱/搜索引擎优化有哪些要点
  • 四川省成都市疫情动态/魔贝课凡seo课程好吗
  • 买卖网站建设/百度推广退款电话
  • 网站做关键词排名每天要做什么/今日最近的新闻大事10条