《重构:改善既有代码的设计》-学习笔记二(2),java程序员面试宝典第五版

Divergent Change(发散式变化)

===========================

你发现你想要修改的一个函数,却必须同时修改诸多不相关的函数,例如,当你想要添加一个新的产品类型,你需要同步修改对产品查找,显示,排序的函数。

有以上这些情况的话,就需要优化代码了

针对某一外界 变化的所有相应修改,都只应该发生在单一class中,而这个新class内的所有内容都应该反应该外界变化。

通过提炼类的方式,找出因着某特定原因而造成的所有变化,独立类。

问题原因:

通常,这种发散式修改是由于编程结构不合理或者“复制-粘贴式编程”。

优化思路


运用提炼类拆分类的行为。

如果不同的类有相同的行为,你可以考虑通过继承来合并类和提炼子类。

效果:

提高代码组织结构

减少重复代码

Shotgun Surgery(散弹式修改)

==========================

注意霰弹式修改 与 发散式变化 区别 : 发散式变化是在一个类受多种变化影响, 每种变化修改的方法不同, 霰弹式修改是 一种变化引发修改多个类中的代码;****

优化思路


1、代码集中到某个类中 : 使用 Move Method(搬移函数) 和 Move Field(搬移字段) 把所有需要修改的代码放进同一个类中;

2、 代码集中到新创建类中 : 没有合适类存放代码, 创建一个类, 使用 Inline Class(内联化类) 方法将一系列的行为放在同一个类中;

3、造成分散式变化 : 上面的两种操作会造成 Divergent Change(分散式变化), 使用Extract Class 处理分散式变化;

Feature Envy(依恋情结)

======================

函数对某个class的兴趣高过对自己所处之 class的兴趣。无数次经验里,我们看到某个函数 为了计算某值,从另一个对象那儿调用几乎半打的取值函数。

影响:数据和行为不在一处,修改不可控。

解决方案:让数据和行为在一起,通过 Extract Method(提炼函数)和Move Method(搬移函数)的方法来处理,这函数到该去的地方。

例子:参考一个优秀博主提供的例子

https://blog.youkuaiyun.com/wxr0323/article/details/7884168

优化思路


1、函数全部数据来自另外一个类

做法:将数据提炼到一个独立函数中  Move method。

2、函数部分数据来自另外一个类

做法:将“部分数据”提炼到一个函数中 Move method。

3、函数的数据来自不同类

做法:将数据分类,分别提炼各自的独立的函数,在将这些函数移到各自属

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值