《重构-改善既有代码的设计》知识精选——重构方法合集

本文详细介绍了重构的多种方法,包括函数的重新组织、对象间特性的迁移、数据的重组以及条件表达式的简化。提炼函数、内联化、引入解释性变量等方法提升了代码可读性,而搬移函数、替换算法等则优化了设计结构。此外,文中还探讨了如何在对象之间平衡数据关系,以及如何处理大型重构任务,以改善既有代码的设计。
摘要由CSDN通过智能技术生成

重新组织函数

Extract Method(提炼函数)

有一段代码可以被组织在一起并独立出来。

将一段代码放进一个独立函数中,并让函数名称解释该函数的用途。

创造一个新函数,根据这个函数的意图来给它命名(以它「做什么」来命名, 而不是以它「怎样做」命名)。

Inline Method(将函数内联化)

一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂。

在函数调用点插入函数本体,然后移除该函数。

有时候你会遇到某些函数,其内部代码和函数名称同样清晰易读。也可能你重构了该函数,使得其内容和其名称变得同样清晰。果真如此,你就应该去掉这个函数,直接使用其中的代码。

另一种需要使用Inline Method 的情况是:你手上有一群组织不甚合理的函数。你可以将它们都inline到一个大型函数中,再从中提炼出组织合理的小型函数。

检查函数,确定它不具多态性(is not polymorphic)。如果subclass继承了这个函数,就不要将此函数inline化,因为subclass无法覆写(overridde)一个根本不存在的函数。

Inline Temp(临时变量内联化)

你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法。

将所有对该变量的引用动作,替换为对它赋值的那个表达式本身。

如果这个临时变量并未被声明为final,那就将它声明为final,然后编译。 这可以检查该临时变量是否真的只被赋值一次

Replace Temp with Query(以查询取代临时变量)

程序以一个临时变量(temp)保存某一表达式的运算结果。

将这个表达式提炼到一个独立函数(译注:所谓查询式,query)中。将这个临时变量的所有「被引用点」替换为「对新函数的调用」。新函数可被其他函数使用。

Introduce Explaining Variable(引入解释性变量)

有一个复杂的表达式。

将该表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。

Split Temporary Variable(剖解临时变量)

程序有某个临时变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量(collecting temporary variable)。

针对每次赋值,创造一个独立的、对应的临时变量。

Remove Assignments to Parameters(移除对参数的赋值动作)

你的代码对一个参数进行赋值动作。

以一个临时变量取代该参数的位置。

它降低了代码的清晰度,而且混淆了 pass by value(传值〕和 pass by reference (传址)这两种参数传递方式。Java只采用 pass by value传递方式

Replace Method with Method Object(以函数对象取代函数)

有一个大型函数,其中对局部变量的使用,使你无法釆用 Extract Method。

将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field) 然后你可以在同一个对象中将这个大型函数分解为数个小型函数。

Substitute Algorithm(替换你的算法)

把某个算法替换为另一个更清晰的算法。

将函数本体(method body)替换为另一个算法。

在对象之间搬移特性

Move Method(搬移函数)

你的程序中,有个函数与其所驻class之外的另一个class进行更多交流:调用后者,或被后者调用。

检查source class的subclass和superclass,看看是否有该函数的其他声明。如果出现其他声明,你或许无法进行搬移,除非target class也同样表现出多态性(polylmorphism〕。

Move Field(搬移值域)

你的程序中,某个field(值域〕被其所驻class之外的另一个class更多地用到。

在target class 建立一个new field,修改source field的所有用户,令它们改用此new field。

Extract Class(提炼类)

某个class做了应该由两个classes做的事。

建立一个新class,将相关的值域和函数从旧class搬移到新class。

Inline Class(将类内联化)

你的某个class没有做太多事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值