0%

摘要:对象应该直接访问其中的数据,还是通过访问函数来访问?

  • 常选择“直接访问”方式,任何时候进行这项重构(self encapsulate field)都是很简单的
  • eplace value with object:将“哑”数据变成善表达的对象
  • hange value to reference:有太多地方需要这一类对象,可用此方法将其变为引用对象
  • eplace array with object:看到一个数组的行为方式很像一个数据结构。将数组变成对象,从而使这个数据结构更清晰地显露出来。move method,为这个对象加入相应行为,真正的好处才得以体现
  • eplace magic number with symbolic constant:处理魔法数(带有特殊含义的数字)
  • hange unidirectional association to bidirectional:将对象之间的单向关联变成双向关联
  • hange bidirectional association to undirectional:将双向关联变成单向关联
  • uplicate Observed data:GUI类处理不该其处理的业务:将处理业务逻辑的行为移到合适的领域类去,需要在领域类中保存这些逻辑的相关数据。一般,不喜欢重复数据,但这是一个意外,这里的重复数据不可避免
  • ncapsulate field:封装类中公开的数据
  • ncapsulate collection:封装类中公开的集合。集合有其特殊协议
  • eplace recorde with data class:如果一整条记录都被裸露在外
  • ype code:类型码,特殊数值。“与实例所属之类型相关的某些东西”。通常以枚举形式出现。通常以static final 整数实现。
  • eplace type code with class:应用于:用来表现某种信息,且不会改变所属类型的行为。可以提供更好的类型检查和更好的平台(在未来方便地将相关的行为添加进去)
  • eplace type code with subclasses :如果当前类型的行为受到类型码的影响
  • eplace type code with state/strategy:更复杂的情况
阅读全文 »

摘要:对象设计过程中,“决定把责任放在哪儿”,即使不是最重要的事儿,也是最重要的事情之一

  • move field=》move method简单的移动对象行为
  • 类往往因为承担过多的责任而变得臃肿不堪。extract class 将一部分责任分离出去。
  • 一个类变得太“不负责任”,inline class将其融入另一个类
  • 一个类使用了另一个类,hide delegate,将这种关系隐藏起来
  • 隐藏委托类,导致拥有者的接口经常变化,remove middle man
  • 当不能访问某个类的源码,又想把其他责任移进这个不可修改的类时,introduce foreign method、introduce local extension;想加入的只是1、2个函数,使用introduce foreign method;否则使用introduce local extension
阅读全文 »

摘要:编写优良的测试程序,可以极大提高编程速度,即使不进行重构也一样。
请构筑一个良好的bug检测器,并经常运行它,对任何开发工作都大有裨益,这是重构的前提。

阅读全文 »