标签:
重构,对于一个工作刚刚满一年的我来说,本是一个陌生的概念。但好在,在参加本次培训之前,项目组内部已经开始对重构提起了重视,我也有幸读了《重构,改善代码的既有设计》这本书。其实,看过这本书的人可能都会有一个感觉,就是书中所概括的种种我们都知道,但是我们是否在意过这种细节,是否约束过自己,每个人心里都有一个答案吧。通过培训,还是对重构有了一个整体的认识。
我想,在重构之前,我们要明白为什么要对代码或者说软件进行重构。之所以要重构,是因为我们的软件中出现了这样或者那样的坏味道,具体的坏味道这里不做赘述,不同的人对于坏味道的归纳总结也不尽相同。但是我认为,凡是不便于理解,不便于修改和扩展的代码都充满了坏味道。我们首先要有识别坏味道的能力,才能去谈重构的事情。
我所理解的重构,是在保证软件的可察行为不变的前提下,对其内部结构进行调整,从而使软件便于理解和修改。首先抛开重构的技巧和目的不谈,我们是如何保证软件的可察行为即软件的固有逻辑不变呢?对,单元测试!重构是需要有单元测试支撑的,这是很关键的一点,毕竟大多数时候,机器比人的直觉可靠。讲到这里,我们就不得不提到一个小的原则,就是Baby Steps, 即每次只对一小部分逻辑进行重构,重构完之后立即执行单元测试,测试通过则进行下一个小步,否则就需要对之前的重构进行调整,直至单元测试通过,这保证了重构的有序进行。
接下来,我们重点学习了函数的重构技巧,这一部分是伴随着代码整洁的许多原则同步进行的。印象深刻的就是十个一原则,即每个变量只用于单一用途、每一行代码只表达一件事情、一个循环只做一件事情、单一抽象层次原则、代码组织得一次只做一件事情、一种变化的仅仅修改一处、函数应该遵守单一职责、函数的圈复杂度小于一十、函数第一原则是必须要短小、编写函数时必须一心一意。说实话,凑这十个一多少有点牵强,但是中间包含的原则是很重要的。之后觉得挺有价值的就是函数中卫语句的的使用,这点去除了繁杂的条件分支,让函数尽快返回,增强了可读性。至此重构函数的大部分都已经有所了解,唯一有些遗憾的是课程没有安排类的重构部分,所以需要自己加强这方面的学习和理解。
最后说几点题外话,有些人认为重构会对软件性能产生影响,对于这一点我不同意也不否认,在硬件已经不是瓶颈的今天,软件首先应该是易理解和可维护的,其次才是高效的,而且前者是有利于后者的实现的。再者,如今大多数编译器已经将函数调用代价缩减到趋于0,所以不用考虑函数多而带来的性能问题,编译器比我们更理解代码,它知道怎么去优化执行。总的来说,我们应该转变一下自己的观念,以前我们指示计算机去执行指令,如今我们应该是向人们解释我们要指示计算机做什么。最后,希望自己通过刻意的练习和理解,能随心所欲写出整洁的代码。
标签:
原文地址:http://www.cnblogs.com/exdream/p/4719637.html