代码重构:霰弹式修改

举报
孙小北 发表于 2022/04/26 23:59:33 2022/04/26
【摘要】 代码重构:霰弹式修改

什么是“霰弹式修改”

  • 定义:霰弹式修改:指的是如果每遇到某种变化,你都必须在许多不同的类内做出许多小修改。此时,你所面临的坏味道就是霰弹式修改

  • 影响:需要修改的代码散布四处,你不但很难找到它们,也很容易错过某个重要的修改。任何修改遗漏都会导致异常结果

  • 改进目标:更好的代码组织;更少的代码重复;更易维护

  • 方法:搬移函数、搬移字段、函数组合成类、函数组合成变换、拆分阶段、内联函数、内联类

“霰弹式修改”有哪些表现,如何重构

  • 案例背景:某跨国公司员工的薪资管理

“霰弹式修改”有哪些表现

  • 场景一:增加一个币种

  • 1.Currency中增加一种货币类型;

  • 2.修改SupportedCurrencyChecker类中SUPPORTED_CURRENCY属性;

  • 3.RateService中汇率相关转换方法适配新增货币类型;

  • 4.SalaryService中汇率相关转换方法适配新增货币类型

  • 增加币种这种变化我们需要在4个类中分别进行适配

  • 场景二:货币汇率变化

  • 1.RateService中汇率分别修改方法queryAllRatesToCny及exchangeRateToCny方法中各币种对应的汇率值

  • 2.SalaryService中修改exchangeRateToCny方法中各币种对应的汇率值

  • 汇率变化时我们需要在2个类中分别进行适配

“霰弹式修改”如何重构?——搬移字段

重构方法:

  • 1.搬移字段

  • 2.搬移方法

  • 3.内联类

“霰弹式修改”如何重构?——拆分阶段

重构方法:拆分阶段

  • 一段代码在同时处理两件或两件以上不同的事,可以把它拆分成各自独立的模块,因为这样到了需要修改的时候,就可以单独处理每个主题,而不必同时在脑子里考虑两个不同的主题

“霰弹式修改”如何重构?——函数组合变换

重构方法:函数组合变换

  • 把函数组合起来的原因之一,是为了避免计算派生数据的逻辑到处重复(把所有计算派生数据的逻辑收拢到一处,这样始终可以在固定的地方找到和更新这些逻辑,避免到处重复)

总结

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。