代码重构概要

一、重新组织函数
1、提炼函数,
将一段代码放入独立的函数中,函数名称解释用途;
这是最常用的重构手法;
2、内联函数
此方法与提炼函数相反,是将不必要的函数放进调用他的函数中,并将其删除;
3、内联临时变量
将对变量的引用操作,替换为对他赋值的那个表达式自身;
4、以查询取代临时变量
如果程序中以一个临时变量保存其一表达式的运算结果,将这个表达式提炼到一个独立的函数,将这个临时变量的所有引用替换为对函数的调用;
5、引入解释性变量
如果一个if语句中表达式特别复杂例如if(A||B||C||D ) 则将ABCD分别提炼出来,并注释正确的意义;
这样做大大增加了代码的可读性;也不容易出错;
6、分解临时变量
如果某个临时变量被赋值多次,但其既不是循环变量也不用于结果的收集,那么针对每次赋值应创建对应的临时变量;
这一点很重要,如果假设的情况真是出现,那么函数中的大块代码将耦合死了,难以拆分;
7、移除对形参的赋值
如果方法中对形参进行赋值,那么应该用临时变量取代形参的位置
这一点也是非常重要的,他涉及到java中传值的方式,参数传值和引用传值;
应该优先考虑参数传值;
8、以函数对象取代函数;
若果一个函数超级大,并且临时变量特别多,则可以将这个函数转换成一个类;
临时变量放在类的成员属性的位置,然后运用 提炼函数 将大函数抽象成多个小函数;
9、替换算法
把某个算法替换成另一个更清晰的算法
二、对象之间搬移函数
1、搬移函数
对函数进行分析,将提炼的函数移动到合适的model对象下;
如果函数有多个参数,那么将其放在引用参数最多的类下;
如果是通用型的函数,那么将其存放在util类下;
这个方法是重构类与类之间关系的最基础的方法;
2、搬移字段
这个方法与搬移函数类似,通过整理类之间的关系,将字段搬移到合适的类中
值得注意的是,类中的字段在程序设计时就应该仔细考量,如果重构时使用了此方法,那么,重构的过程有可能异常痛苦;
3、提炼类
某个类做了两个类的工作,那么从中抽出一个类;
这以为这字段和方法的移动;
4、类的内联化
某一个类没有做太多事,或者引用单一,那么可以将他放在另一个类中;
这与提炼类是相反的操作;
5、隐藏委托关系;
在服务类上建立客户所需的所有函数,用以隐藏委托关系;
6、移除中间人
这个操作与隐藏委托关系是相反的;其作用是用户直接面对其实现;
7、引入外加函数
当需要在一个类中添加一个函数,但你无法修改这个类时,
在客户类中建立一个函数,并以第一参数形式传入服务类;
如果一个服务类,你修改不了,那么可以在调用类上如此实现;
但是最好的办法还是修改服务类,有时候这意味着要修改jar;
8、引入本地扩展
此方法与上一个方法类似,都是要拓展功能,但是实现方式上有所不同;
引入本地拓展是新建一个类并继承服务类,并在扩展类中添加新的功能;
三、数据的重新组织
1、自封装字段
就是只能通过方法访问字段,然后字段为私有;
在类内部获取字段时也要通过方法访问字段,不要直接使用;
实际上遵循的是java的封装元则
2、对象取代数据值
多种表示同一功能的数据,可以封装在 一个对象里;
项目中页面和后台之间的值最好也用对象进行封装;
3、将值对象改为引用对象
你可以从一个类衍生出多个彼此相等的事例,并希望将他们替换为同一个对象,将这个值替换为对象引用;
要注意equals和hashCode方法;
4、将引用对象转换为值对象
一个引用对象,很小且不可变,而且不易管理,那么将他变成一个值对象;
此方法与上一个刚好相反;
5、以对象取代数组
如果一个数组,其中各元素各自代表不同的东西,那么以对象代替数组,并用对象中的变量代替数组中的值;
显然一件的,对象更易于管理;可读性也更强;
6、将单向关联改为双向关联
两个类互相引用对方的特性,这两个类可以互相持有对方的指针;
7、将双向关联改为单向关联;
两个类之间有双向关联,但现在某一个类不需要引用另一个类,那么将两个类的关系改为单向关联;
这个操作和上一个操作正好正好相反;
8、以字面常量取代魔法数
这个很好理解,一般代码中是不允许有魔法数存在的,如果用了魔法数,那么,请将他提升为常量;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值