1 简介
春节期间,自己也没有阅读其他的书籍,一方面是因为家里没有空调,读书写字时很冷,另外一方面就是灯光不亮,看书时很累眼睛,最后就是在家里总是无聊,心很浮躁,静不下来学习,所以也没有看其他的书籍。
在阅读完《重构 改善既有代码的设计》自己陆续写了一些博客,当然,很多时候只是一种整理,也可以说是一种变相的温故而知新吧。
读完本书时,有一些重构手法给我留下了很深刻的印象,诸如在重新组织函数节的Extract Method, 在对象之间搬移特性中的Move Method,重新组织数据中的Duplicate Observed Data,简化条件表达式中的Replace Conditional with Polymorphism(以多态取代条件表达式),简化函数调用中Rename Method(函数改名)、Encapsulate Downcast(封装向下转型),处理概括关系中的继承与委托的恰当选择都给我留下了许多深刻的印象。
本文也是简单的对本书的核心内容即重构列表进行梳理,以期能够加深印象,增加对面向对象编程的理解和良好代码风格习惯的养成。
2 重构列表
2.1 记录格式
本小节对应原书第五章,讲述了重构列表中统一的格式。
对记录格式的详细介绍如下图:
2.2 寻找引用点
寻找引用点的含义为寻找对于某个函数、某个字段或某个类的所有引用点。可以使用IDEA、Eclipse等类似的集成开发工具,以及具有文本查找替换功能的工具,诸如Notepad++等。
2.3 这些重构手法有多成熟
重构的基本技巧----小步前进,频繁测试已经得到多年的实践检验。
在使用重构的时候,请随时知道自己在做什么。
3 6类重构
本书关于重构的主要内容如下所示:
3.1 重新组织函数
通过对函数进行整理,使之能够恰当地包装代码。其中Extract Method是本小节的核心章节,如何提炼方法,并且解决在提炼方法中遇到的局部变量问题则是该重构手法的难点。
重新组织函数主要应对的是Long Method过长函数的代码坏味道。关于该部分的具体内容可以参见《重构》之P76进行深入理解。在应对重复代码这个坏味道时,也可以看到Extract Method也占据了很大一部分内容。
3.2 在对象之间搬移特性
决定把责任放在哪儿是本小节的核心所在。其中Move Method是第七章重构中的核心手法。但可能不在一开始就保证做的很对,但可以运用重构,改变自己原先的设计。可以看到本章节的8个重构手法中,包括对于函数和字段的搬迁,提炼类和将类内联化,以及隐藏委托关系和移除中间人,而最后两个重构手法,则是当不能访问某个类的源码,却又想把其他责任移进这个不可修改的类时,才会使用。
3.3 重新组织数据
本章主要是讲述了轻松处理数据的重构手法。其中Duplicate Observed Data需要好好的理解,其中对于把数组、魔术转换成对象和常量的编程风格需要力行在自己的编程工作中。用对象表示概念,用对象取代简单类型是一个无法估量的跳跃。面向对象编程的两个大特性封装和多态,分别解决了字段的可见性问题,以及与实际所属之类相关的某些东西问题。使得面向对象编程非常的灵活,很少使用switch结构和if-then-else结构(即对类型码的处理)。
3.4 简化条件表达式
本章则是以条件表达式为最主要的核心考虑内容,因为条件逻辑可能十分复杂,核心重构手法为Decompose Conditional,可以将一个复杂的条件逻辑分成若干块,将“分支逻辑”和“操作细节”进行分离。
因为程序员在日常编码中,分支结构非常常见,因此该部分非常重要。因为一个小细节的优化,积累起来就会增强代码的可读性很多。
3.5 简化函数调用
该章节则是把函数调用作为重构的主题内容进行探讨。函数签名主要由函数返回值,函数名,函数参数组成。在面向对象技术中,一个核心概念为接口interface,因此,可以进行很多步骤的优化,使得接口容易被理解和使用,这也是开发良好面向对象软件的关键。因此从下属的图片中对于函数的处理中包括对函数名的修改,尤其是对于函数参数的梳理进行了很详细的介绍。过长参数列会让人无法理解,使用对象技术,简短参数列是增强代码可读性的很好的手段
注意:要想成为一个真正的编程高手,起名的水平是至关重要的。
3.6 处理概括关系
该部分的重构则是把继承体系作为重构的主要内容。梳理继承体系包括函数、字段在继承体系中的上下移动,其中个Form Template Method则是通过模板函数进一步的把相同点和不同点进行分离,通过这样的重构可以使代码更具扩展性。
4 总结
本文主要是总结了《重构 改善既有代码的设计》一书中的核心内容,重构列表、简单的梳理核心结构。19年更多的是要认真的使用这些重构手法并融会贯通在自己的日常工作中。学以致用,实践是积累的根本过程,也是检验真理的唯一标准。
参考
《重构 改善既有代码的设计》之重构原则
《重构 改善既有代码的设计》之重构,第一个案例详解
《重构 改善既有代码的设计》之JUnit测试框架以及IDEA与JUnit整合
《重构 改善既有代码的设计》之代码的坏味道
《重构 改善既有代码的设计》之重构列表