【代码坏味道】变更阻碍者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每新增一个子类,多个类都得配套加子类合并继承结构,移除多余子类或改为组合方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值