码迷,mamicode.com
首页 > 其他好文 > 详细

重构手法(五)之重新组织数据

时间:2016-02-22 15:21:49      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

1、Self Encapsulate Field(自封装字段)

症状:你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙。

解决方法:为这个字段建立取值/设值函数,并且只以这些函数来访问字段。

2、Replace Data Value with Object(以对象取代数据值)

症状:你有一个数据项,需要与其他数据和行为一起使用才有意义。

解决方法:将数据变成对象

3、Change Value to Reference(将值对象改为引用对象)

症状:你从一个类衍生出许多彼此相等的实体,希望将它们替换为同一个对象。

解决方法:将这个值对象变成引用对象。

4、Change Reference to Value(将引用对象改为值对象)

症状:你有一个引用对象,很小且不可变,而且不易管理。

解决方法:将它变成一个值对象。

5、Replace Array with Object(以对象取代数组)

症状:你有一个数组,其中的元素各自代表不同的东西。

解决方法:以对象代替数组。对于数组中的每个元素,以一个字段来表示。

6、Duplicate Observed Data(复制“被监视数据”)

症状:你有一些领域数据置身于GUI控件中,而领域函数需要访问这些数据。

解决方法:将该数据复制到一个领域对象中。建立一个Observer模式,用以同步领域对象和GUI对象内的重复数据。

7、Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)

症状:两个类都需要使用对方特性,但其间只有一条单向连接。

解决方法:添加一个反向指针,并使修改函数能同时更新两条连接。

8、Change Bidirectional Association to Unidirectional(将双向关联改为单向关联)

症状:两个类之间有双向关联,但其中一个类如今不再需要另一个类的特性。

解决方法:去除不必要的关联。

9、Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)

症状:你有一个字面数值,带有特别含义。

解决方法:创造一个常量,根据其意义为它命名,并将上述的字面数值替换为这个常量。

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 Subclasses(以子类取代类型码)

症状:你有一个不可变的类型码,它会影响类的行为。

解决方法:以子类取代这个类型码。

15、Replace Type Code with State/Strategy(以State/Strategy取代类型码)

症状:你有一个类型码,它会影响类的行为,但你无法通过继承手法消除它。

解决方法:以状态对象取代类型码。

16、Replace Subclass with Fields(以字段取代子类)

症状:你的各个子类的唯一差别只在“返回常量数据”的函数身上。

解决方法:修改这些函数,使它们返回超类中的某个(新增)字段,然后销毁子类

重构手法(五)之重新组织数据

标签:

原文地址:http://www.cnblogs.com/dongerlei/p/5180151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!