《重构》C#版实现(二)抽取AmountFor方法
上一篇讲了如何使用原始(待重构的)代码构建自动单元测试,以保障后面重构的进行。如果你跟着一步一步地做,会发现,自动测试绝对是重构过程必不可少的工具。那么现在开始真刀真枪地进行重构。
等等,在开始前的最后一刻,还需要提醒的是,也许你带着满腔热情,想把代码重构得优雅极致,但就像平时的工作一样,重构的过程更需要的是理性思考,而不是冲动。每一次重构实践,都应该包含了对设计、实现、可维护、可扩展性,以及成本的估算和权衡。
所以,首先看看对于Statement方法来说,从哪里入手比较合适?
7.意外发现,所有测试都失败了,查看StatementForCharles的错误消息如下:
至此,一个简单的方法抽取(Extract Method)重构实践方算是完成了,总结的步骤如下:
1.思考现有代码的缺陷、确定重构的价值
2.从重构价值入手,确定重构入手点
3.在修改原方法前,先建立一个方法,该方法名称必须能表达被抽取内容的语义(概念)
4.将待抽取内容复制到新方法中,并根据需要添加局部变量的定义
5.去除原方法中的相关内容,替换成新方法的调用
6.运行单元测试
7.如果测试不通过,检查测试结果,或调试源代码,直到测试通过为止
8.重构完成
这个例子包含了作者刻意添加的一个小意外,主要是为了演示测试的重要性。但即使不考虑这种意外,上面的步骤还是十分繁复的,对于重构新手而言,一步一步跟着做可能收获会更大。除非对重构技术十分熟悉,否则不要轻易跳过上面的任何一步。一来,良好的基础和习惯是十分重要的。二来,每一步都有它的考虑,跳过任何一步意味着少了一份思考。