重读《重构》:第一篇
近期在给部门内的小伙伴培训python,很多小伙伴,问我。你为什么会那么拆分程序,你为什么要这么做。我回答“我读过重构这本书,我所用的方法就是这本书里所讲的,推荐你们去看这本书。”讲完后,我就心虚了。一则这本书是我将近8年前读的,虽然记得不少原则性的内容,但是很多细节确实忘记了。二则读书的时候功力尚浅,虽然看了很多遍,也操练过所有例子,估计有好多地方还是囫囵吞枣。近几年所写东西均为测试相关的项目,构造简单,没有长期维护之苦,也就疏于了操练。估计这本书实际上已经丢了七八分了。现在下决心捡起来再读一遍,表面由头是温故而知新,为自己的培训整理素材,实则是怕被真正读了书来问问题的小伙伴,问倒了太没面子。
后续博客会记录我读这本书的一些心得,主要是摘抄+感想。想到哪里写到哪里,天马行空,图个痛快。欢迎路过的同学拍砖,我就喜欢能引发我思考的问题。书的版本是熊节翻译的那本(这本书跟了我快10年了,前几年处理了大批快餐it书,这本是依然保留的经典书籍之一),那么下面开始了。
什么时候来重构?
如果你发现给程序添加新特性的时候很困难,这时候就应该重构了,先重构后添加特性。(体会:其实要把重构的时间考虑在项目中,不然如果项目生命周期超过5年,三年内你就不得不抽出半年来搞一下大的架构调整,这就是不是重构了,很多时候得推倒至少一半东西,我所见过的项目大抵如此。)
重构的第一步:
永远是搞一张测试保护网先把功能保护起来。(体会,这个概念这两年叫的比较响,其实老马十几年前就在一直推崇测试保护这种方式了)
self-checking的概念,估计好多人读第一遍会比较晕,其实就是给测试用例加上验证点。
第一个例子:
使用抽取方法(Extract method)的方法抽取逻辑泥团(logical clump) 。
这里其实就是把一段跟外界没有太多交互复杂逻辑抽取了成一个方法。叫法很奇怪。我的理解就是:如果一个方法内部的一段逻辑太长,自己又能自成一块儿小功能(所谓的逻辑泥团,这里泥团不是指脏,而是指的黏在一起)就把它们抽取出来。老马在第一章最后一段说希望能够有IDE实现Exract Method。这一想法变成了现实。现在Eclipse,intellij,netbeans里边都内置了重构工具。只是国内鲜有人用这些东西。
观点摘抄: 重构技术以微小的步伐修改程序。如果你犯下错误,很容易便可发现它。
观点摘抄: 任何傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。书中举了修改变量名称让它更好懂的例子。
例子还使用了 Move method的方法,将一个方法从一个类移到另一个类中去。为了保持代码原有功能不变,被移走方法的类重新写一个同名方法,调用被挪走的方法即可。这种方式被成为委托(delegate)
读至18页,待续。