代码重构:发散式变化

举报
孙小北 发表于 2022/04/26 23:59:04 2022/04/26
【摘要】 代码重构:发散式变化

什么是发散式变化(Divergent Change)

  • 定义: 某个模块经常因为不同的原因在不同的方向上发生变化

  • 影响: 通常,发散式变化是由于多个变化方向之间有较多的来回调用或者函数内部混合了多类处理逻辑。当处于多个不同上下文的外部行为发生变化时候,都会引起对同一个类或模块的修改,影响了代码的可读和可维护性

  • 改进目标: 提高代码组织结构、职责单一提升代码可读性、可维护性

  • 方法: 拆分阶段、搬移函数、提炼函数、提炼类

案例代码

代码背景

  • TheatricalPlayers为戏剧演员类,拥有戏剧类型,开取发票信息,演出业务信息等相关逻辑数据存取处理

  • 在getInvoiceData方法中,开取发票信息,会首先从数据库拿到演出信息,再计算演出场次、薪酬、积分等信息。

症状/问题

  • getInvoiceData函数职责不单一,当从数据库获取Performance信息的方式以及totalAmout和volumeCerdits的计算方式和打印格式发生变化时,都会导致TheatricalPlayers类中发散式变化。

  • 案例的改进路线

    • 将独立的枚举类PlayType提炼为公共类,避免循环引用

    • 对于数据库连接的操作运用提炼函数和搬移函数手法,提炼出接口和实现类

    • 对于先后发生变化的totalAmount,voluemCredits,InvoiceData打印,通过拆分阶段和提炼函数 进行解耦,职责单一

重构对比

  • 重构前:数据库连接,开取发票多个属性信息均耦合在一起且有互相依赖,当修改某个单一属性时,不可避免要修改多处耦合的上下文

  • 重构后:各个功能模块职责单一,代码逻辑;发生变化时,进入单一入口修改即可

总结

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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