@code33
2015-11-07T17:10:50.000000Z
字数 5802
阅读 724
java
学习笔记
生产须知
此文转载自http://blog.csdn.net/shulianghan/article/details/20009689
用到的重构方法简介 : Extract Method(提炼函数), Pull Up Method(函数上移), From Template Method(塑造模板函数), Substitute Algorithm(替换算法), Extract Class(提炼类);
同类函数重复代码 : 同一个类中 两个函数 使用了相同的表达式;
兄弟子类重复代码 : 一个父类有两个子类, 这两个子类中存在相同的表达式;
用到的重构方法 : Extract Method(提炼函数), Replace Temp with Query(以查询取代临时变量), Introduce Parameter Object(引入参数对象), Preserve Whole Object(保持对象完整), Decompose Conditional(分解条件表达式);
Decompose Conditional(分解条件表达式) : 将 if then else while 等语句的条件表达式提炼出来, 放到独立的函数中去;
分解函数结果 : 尽可能分解函, 即使函数中只有一行代码, 哪怕函数调用比函数还要长, 只要函数名能解释代码用途就可以;
常用分解方法 : Extract Method(提炼函数) 适用于 99% 的过长函数情况, 只要将函数中冗长的部分提取出来, 放到另外一个函数中即可;
参数过多情况 : 如果函数内有大量的 参数 和 临时变量, 就会对函数提炼形成阻碍, 这时候使用 Extract Method(提炼函数) 方法就会将许多参数 和 临时变量当做参数传入到 提炼出来的函数中;
提炼代码技巧 :
用到的重构方法 : Extract Class(提炼类), Extract Subclass(提炼子类), Extract Interface(提炼接口), Duplicate Observed Data(复制被监视的数据);
* Extract Class(提炼类) : 一个类中做了两个类做的事, 建立一个新类, 将相关的字段和函数从旧类中搬移到新类;
* Extract Subclass(提炼子类) : 一个类中的某些特性只能被一部分实例使用到, 可以新建一个子类, 将只能由一部分实例用到的特性转移到子类中;
* Extract Interface(提炼接口) : 多个客户端使用类中的同一组代码, 或者两个类的接口有相同的部分, 此时可以将相同的子集提炼到一个独立接口中;
* Duplicate Observed Data(复制被监视的数据) : 一些领域数据放在GUI控件中, 领域函数需要访问这些数据; 将这些数据复制到一个领域对象中, 建立一个观察者模式, 用来同步领域对象 和 GUI对象的重要数据;
实例变量太多解决方案 : 使用 Extract Class (提炼类) 方法将一些变量提炼出来, 放入新类中;
代码太多解决方案 :
使用到的重构方法简介 : Replace Parameter with Method(以函数取代参数), Preserve Whole Object(保持对象完整), Introduce Parameter Object(引入参数对象);
Introduce Parameter Object(引入参数对象) : 将函数参数封装在一个对象中;
参数列过长 :
普通参数和对象参数对比 :
参数的其它操作 :
对象依赖与函数参数之间的平衡 : 二者是相对的, 下面一定要选择一种不利状况;
对于这个在我所在的研发团队中这个问题很严重, 因为做的是远程医疗系统, 在Android上要支持许多医疗设备, 每次添加医疗设备都会死去活来;
使用到的重构方法简介 : Extract Class(提炼类);
期望效果 : 当我们添加新功能的时候, 只需要修改一个地方即可, 针对外界变化相应的修改, 只发生在单一类中, 如果做不到这一点, 就意味着程序有了坏味道 Divergent Change;
使用到的重构方法简介 : Move Method(搬移函数), Move Field(搬移字段), Inline Class(内联化类);
Inline Class(内联化类) : 类A 没有太多功能, 将类A 的所有特性搬移到 类B中, 删除类A ;
霰弹式修改坏味道 : 遇到的每种变化都需要在许多不同类内做出小修改, 即要修改的代码散布于四处, 不但很难找到, 而且容易忘记重要的修改, 这种情况就是霰弹式修改;
重构霰弹式修改 :
转载自 http://blog.csdn.net/shulianghan/article/details/20009689