【读书活动感悟分享】-愚公-《重构:改善既有代码的设计》影片出租店账单打印的案例分享_文章

【读书活动感悟分享】-愚公-《重构:改善既有代码的设计》影片出租店账单打印的案例分享

庄德洲
发表于 2025-11-09 17:58:20

【前言】

         代码重构对于维护程序的可读性和系统的健壮性具有重要意义。今天有幸阅读这本书,从一个简单案例影片出租店的账单打印的单一方法的角度了解单元测试的重要性、函数分解的详细思路的与内联变量移除的具体方法。


【内容概述】

一、重构的前置条件——单元测试

         重构前,需要先检查自己是否有一套单元测试作为bug检测器。该测试未必需要特别高级的运行逻辑,但必须具备自原有业务逻辑的我检验能力,以避免重构时程序员可能发生的错误。

二、函数分解——提炼函数

        函数的分解本身其实就是代码重构的主题内容,内联变量的移除本身也属于函数分解的一部分。

         在整个账单打印的业务逻辑中,最复杂的业务是判断客户所点的影片类型,再进行相应的费用计算。这一块在代码中也是一块巨大的switch分支,将这块业务逻辑提炼成一个函数。这块逻辑并不复杂,但函数提炼完成后,主业务直接调用该方法,便会因参数传递和返回值读取产生很多的内联变量

         如何删除这些内联变量就是业务重构的核心。

三、函数分解——内联变量移除

         在案例中,内联变量的移除是一个循环往复的过程。需要注意的是在函数提炼完成、以及每个内联变量移除后记得要执行单元测试并进行签入提交

         参数和返回值内联变量的移除是两个截然不同的逻辑。参数通常需要通过一些逻辑获取,有的只是简单的索引器,有的则需要计算获取,这些实参的计算逻辑通常也可以提炼成一个函数,再进行内联变量的移除。

        返回值类型的内联变量最关键的问题就是在主业务中的声明和调用。作者提供的解决方案是:一、去掉主业务中的返回值变量声明,二、在每个调用该变量的地方重复调用分解后的函数。

        在整个内联变量的移除过程中,观众积分总和的处理逻辑无疑是最复杂的,因为它需要在循环体中累加得到。将这个变量移除总共分四步:第一步,将积分总和的计算逻辑从原有的循环体中剥离,在算完总金额之后再次循环进行积分计算。第二部,将费用循环计算的逻辑进行函数提炼,这就是一个函数提炼的过程。再往后就是内联变量的移除过程。


【技能提炼】

1、重构的过程就是反复进行函数提炼和内联变量移除的过程。

2、内联变量的移除方法:

(1)将变量的计算逻辑分离

(2)进行函数提炼

(3)去掉变量声明

(4)使用时重复调用提炼函数


【过程反思】

         性能问题无疑是整个过程中最令人担忧的问题,毕竟同一个方法在每个使用的地方都要重复调用。作者的建议是先完成重构,再进行性能优化。

114 0

评论


意见反馈