从新组织数据相关重构手法数据库
1.Self Encapsulate Field(自封装字段)(你直接访问一个字段,可是字段之间的耦合变得笨拙,为这个字段创建setter getter 并只用函数来访问字段)数组
2.Replace Data Value with Object(用对象取代数据值)(你有一个数据项,须要和其余数据和行为一块儿才有意思,那就把数据项变为对象)函数
3.Change Value to Reference(把值对象改成引用对象,你从一个类衍生出许多彼此相等的实例,但愿把他们替换为同一个对象,把这个值对象变为引用对象)spa
4.Change Reference to value(把引用对象改成值对象 )(你有一个引用对象,很小切不可变,并且不易管理,把他变为一个值对象)指针
5.Rpplace Aarray with object(以对象取代数组)(你有一个数组,其中的元素各自表明不一样的东西,以对象替换数组,对于数组中的每一个元素,以一个字段来表示)code
6.Duplicate Observed Data(复制”被监视数据“,你有一些领域数据置身于GUI控件中,而领域函数须要访问这些数据。将该数据复制到一个领域对象中创建Observer模式,用于同步领域对象和GUI对象内的重复数据)server
7.change unidirectional associarion to bidirectional(把单向关联改成双向关联)(2个类都须要使用对方特性,但其间只有一条单向连接,添加一个反向指针,并修改函数可以同时更新到2条连接)对象
8.change bidirectional association to unidirectional(把双向关联改成单向关联)(2个类之间有双向关联,但其中一个类现在再也不须要另一个类的特性。去除没必要要的关联)继承
9.replace magic number with sysbolic constant(以字面常量取代魔数)(你有衣蛾字面数值,带有特别含义,创造一个常量,根据其意义为他命名,并将上述的字面值替换为这个常量)ci
10.encapsulate field(封装字段)(你的类中存在一个public字段,将他申明为private 而且提供相应的访问函数)
11.encapsulate collection(封装集合)(有一个函数返回一个集合,让这个函数返回该集合的一个只读副本,并在这个类中提供添加移除集合元素的函数)
12.replace record with data class(数据类取代记录),好比查询数据库的时候,使用类来替代记录会更好)
13.replace type code with class(类取代类型码),类之中有一个数值类型码,可是它并不影响类 的行为。用一个新的类来替换该数值码)
14.replace type code with subclass (子类取代类型码)(你有一个不可变的类型码他会影响类的行为,子类取代这个类型码)
15.replace type code with state/strategy(state/strategy取代类型码)(你有一个类型码,它会影响类的行为,但你没法经过继承来消除它。以状态对象取代类型码)
作法:在超类中创建一个查询函数用于返回状态码,在每一个子类中重写该函数,返回确切的状态码,在原类中创建一个字段,来保存新建的状态对象,调整原类中负责查询类型码的函数,把查询动做转发给状态对象,调整原类中为类型码设置的函数,吧一个恰当的状态对象子类赋值给保存状态对象的那个字段。
16.replace subclass with fields(字段取代子类)(你的各个子类惟一差异只在返回常量数据的函数身上,修改这些函数使他们返回超类中的某个字段,而后销毁子类)