【Java架构师】重构代码设计精要

234 篇文章 6 订阅
136 篇文章 0 订阅

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)
你有一个大型函数,其中对局部变量的使用使你无法采用提炼函数,将这个函数放进一个单独对象中,如此以来局部变量就变成了对象中的一个字段,然后你可以在同一个对象中将大型函数分解成多个小型函数。对于新手小白想更轻松的学好Java提升,Java架构,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,扩列下我尉(同英):CGMX9880 【教程/工具/方法/解疑】

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

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

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

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

/* * 原始需求背景: * 网宿CDN要按月收取客户的服务费用,根据流量的大小、 * 服务的类型等,收取不同的费用,收费规则如下: * web应用:1000元/M * 流媒体应用:1000元/M*0.7 * 下载应用:1000元/M*0.5 * 月末打印报表时,要罗列每个用户每个频道的费用、客户总费用, * 还要打印该客户的重要性指数,重要性指数=网页流/100+下载流量/600; * * 需求变更场景: * 系统已经开发出来了,接下来,运维部门现在希望对系统做一点修改, * 首先,他们希望能够输出xml,这样可以被其它系统读取和处理,但是, * 这段代码根本不可能在输出xml的代码中复用report()的任何行为,唯一 * 可以做的就是重写一个xmlReport(),大量重复report()中的行为,当然, * 现在这个修改还不费劲,拷贝一份report()直接修改就是了。 * 不久,成本中心又要求修改计费规则,于是我们必须同时修改xmlReport() * 和report(),并确保其一致性,当后续还要修改的时候,复制-黏贴的问题就 * 浮现出来了,这造成了潜在的威胁。 * 再后来,客服部门希望修改服务类型和用户重要性指数的计算规则, * 但还没决定怎么改,他们设想了几种方案,这些方案会影响用户的计费规则, * 程序必须再次同时修改xmlReport()和report(),随着各种规则变得越来越复杂, * 适当的修改点越 来越难找,不犯错误的机会越来越少。 * 现在,我们运用所学的OO原则和方法开始进行改写吧。 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值