代码重构:发散式变化
什么是发散式变化(Divergent Change)
-
定义: 某个模块经常因为不同的原因在不同的方向上发生变化
-
影响: 通常,发散式变化是由于多个变化方向之间有较多的来回调用或者函数内部混合了多类处理逻辑。当处于多个不同上下文的外部行为发生变化时候,都会引起对同一个类或模块的修改,影响了代码的可读和可维护性
-
改进目标: 提高代码组织结构、职责单一提升代码可读性、可维护性
-
方法: 拆分阶段、搬移函数、提炼函数、提炼类
案例代码
代码背景
-
TheatricalPlayers为戏剧演员类,拥有戏剧类型,开取发票信息,演出业务信息等相关逻辑数据存取处理
-
在getInvoiceData方法中,开取发票信息,会首先从数据库拿到演出信息,再计算演出场次、薪酬、积分等信息。
症状/问题
-
getInvoiceData函数职责不单一,当从数据库获取Performance信息的方式以及totalAmout和volumeCerdits的计算方式和打印格式发生变化时,都会导致TheatricalPlayers类中发散式变化。
-
案例的改进路线
-
将独立的枚举类PlayType提炼为公共类,避免循环引用
-
对于数据库连接的操作运用提炼函数和搬移函数手法,提炼出接口和实现类
-
对于先后发生变化的totalAmount,voluemCredits,InvoiceData打印,通过拆分阶段和提炼函数 进行解耦,职责单一
-
重构对比
-
重构前:数据库连接,开取发票多个属性信息均耦合在一起且有互相依赖,当修改某个单一属性时,不可避免要修改多处耦合的上下文
-
重构后:各个功能模块职责单一,代码逻辑;发生变化时,进入单一入口修改即可
总结
- 点赞
- 收藏
- 关注作者
评论(0)