读《重构》

  • 重构技术就是以微小的步伐修改程序。如果你犯下错误,很容易便可发现它。
  • 傻瓜都能写出计算机可以理解的代码。唯有能写出人类容易理解的代码的,才是优秀的程序员。
  • 如果重构引入了性能损耗,先完成重构,再做性能优化。
  • 重构早期的主要动力是尝试理解代码如何工作。
  • 好代码的检验标准就是人们是否能轻而易举地修改它。
  • 重构的唯一目的就是让我们开发很快,用更少的工作量创造更大的价值。

前言

《重构》这本书,虽然看着很厚,但是读起来却又感觉很薄。用上周末的时间,读完这本书还是有可能的。之前也有做过重构的工作,不过那都是经验之谈,如果被问起为什么这么重构,估计我也不能很好得回答这个问题。所以,在这种情况下通读《重构》,还是挺有收获的,起码从经验上升到了理论。

重构原则

要了解重构,还是从 What,Why,How 三方面入手。

  • 重构是什么?

  • 为什么要重构?

  • 怎么去重构?

重构,使用一系列重构手法,在不改变可观察行为的前提下,对软件内部结构的一种调整。目的是提高其可理解性,降低其修改成本。
什么时候重构?如果你看不懂一段代码是在做什么,那么重构它。如果一段代码的目的依赖于注释,那么重构它。如果,一段代码想要添加新的功能,却无处下手,那么重构它。重构就是为了更容易理解,更容易修改。如果不能满足以上条件,这时候就有必要考虑重构了。
程序也并非从头到尾翻新一遍才叫重构,步子不能迈大,更希望的是小步快走的节奏。随时随地重构,用小步积累起来慢慢改善系统的设计。当然在实际的开发中,还会遇到各种挑战,比如,新功能开发,测试,性能等问题。而这些,在《重构》的前两章都有介绍。
知道了什么和为什么,那么,怎么去重构呢?在重构前,我们还要知道如何辨别需要重构的代码。

重构

《重构》在第三章也分门别类列举了需要重构的代码所具有的特点。

  • 神秘命名,命名要清晰表达功能和用法。
  • 重复代码,提炼重复代码,避免重复的代码结构。
  • 过长函数,函数越长就越难理解,分解函数,使用小函数。
  • 过长参数列表和全局数据。
  • 可变数据,对数据的修改经常会导致难以发现和难以跟踪的 bug。
  • 发散式变化,模块因不同原因在不同方向上发生了变化。
  • 霰弹式修改,将变化的封装起来。
  • 依恋情节,一个函数和另一个模块的函数或者数据交流格外频繁,远胜于在自己所处模块内部的交流。
  • 数据泥团和基本类型的偏执。
  • 重复的 switch 和循环语句。
  • 冗赘的元素、夸夸其谈通用性和临时字段。
  • 过长的消息链和中间人。
  • 内幕交易,避免模块间的大量数据交换,降低模块间的耦合性。
  • 过大的类和异曲同工的类。
  • 纯数据的类、被拒绝的遗赠和注释。

以上就是书中列举的代码的坏味道,每一个坏味道中都有相应的重构手法。
第四章,小步快走虽然很大程度上保障重构后的系统稳定性,不过构筑一个测试体系就更好了。
从第五章开始,作者依据重构手法的不同划分为第一组重构、封装、搬移特性、重新组织数据、简化条件逻辑、重构 API、处理继承关系等。
本书的内容很多却又不多,正如作者所说,你可以把它当成重构字典,没必要记住每个重构手法,只需要在重构时知道采用什么样的策略即可。

------------- The End -------------
显示评论