重构代码设计精要

extract method 提炼方法 (110)
将代码放进一个独立函数中,并让函数名称解释该函数的用途

pull up field 字段上移 (332)
两个子类拥有相同的字段,将该字段移动到超类。

extract class 提炼类(149)
某个类做了应有两个类做的事,建立一个新类,将相关字段和函数从旧类搬到心类。

move method 搬移函数
程序中,有个函数与其所驻类之外的另一个类进行更过交流,调用后者,或被后者调用,在该函数最常引用的类中建立一个新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。

encapsulate field 封装字段
将其声明为private,并提供相应的访问函数。安全问题,如果不封装其他地方修改对象中的属性,该对象的使用者并不知情。

move field 搬移字段
与4相同意思。

duplicated code 重复代码 (76)

form template method 塑造模板函数 (345)
你有一些子类,其中相应的某些函数,以相同的顺序执行类似的操作,但各个操作的细节上有所不同。
将这些操作分别放进独立函数中,并保持他们都有相同的签名。于是原函数也变得相同了,将原函数上移到超类。
调用的时候调用超类中的原函数,通过多态指定调用的子类。
设计模式中的Template method 注重顺序。(我现在做的项目中edi导出报文使用的就是模板方法模式)

substitute Algorithm 替换算法 (139)
将函数本体替换为另一个算法(注意if判断固定几个值时,可以把固定的几个值放入集合中 139)

replace temp with query 以查询取代临时变量 (120)
你的程序以一个临时变量保存某一表达式的运算结果,将这个表达式提炼到一个独立函数,将这个临时变量的所有引用点替换为对新函数的调用,此后,新函数就可以被其他函数调用。

split temporary variable 分解临时变量
你的程序某个临时变量被幅值超过一次,他即不是循环变量,也不被用于收集计算结果,针对每一次赋值,创造一个对立的,对应的临时变量(final)

Intriduce paramter object 引入参数对象( 295)
某些参数总是很自然的同时出现,以一个对象取代这些参数。(如startDate,endDate)

preserve whole object 保持对象完整 (288)
你从某个对象取出若干值,将他们作为某一次函数调用时的参数,改为传递整个对象。

replace method with method object 以函数对象取代函数 (135)
你有一个大型函数,其中对局部变量的使用使你无法采用提炼函数,将这个函数放进一个单独对象中,如此以来局部变量就变成了对象中的一个字段,然后你可以在同一个对象中将大型函数分解成多个小型函数。

decompose conditional 分解条件表达式 (238)
有一个复杂的条件表达式语句,从 if then else 三个段落中分别提炼独立函数。(每一个等号都有其特定意义,通过函数名称标注)

extract interfact 提炼接口 (341)
若干客户使用类接口中的同一子集,或者两个类的接口有部门相同,将相同的子集提炼到一个独立接口中。(接口弥补了继承,通用也可以通过继承的方式理解接口类与实现类)

Long parameter list 过长参数列
太长参数类导致难以理解。太多参数会造成前后不一致,不易使用,而且一旦你需要更多数据,旧不得不修改他。

inline class 将类内联化 (154)
某各类没有做太多事情,将这个类所有特性搬移到另一个类中,然后移除原类。与提炼类相反。

作者:乐乐plus
链接:https://juejin.cn/post/6962796851544195109
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(重构代码设计精要)