第八章 重新组织数据(Organizing Data)

来源:互联网 发布:2016年中国进口数据 编辑:程序博客网 时间:2024/06/05 04:46

 

第八章 重新组织数据(Organizing Data)

8.1   Self Encapsulate Field(自封装值域)  就是set get函数

症状:你直接访问一个值域(field),但与值域直接按的耦合关系逐渐变得笨拙。

解决办法:为这个值域建立取值/设值函数(getting/setting methods),并且只以这些函数来访问值域。

 

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

症状:你有一笔数据项(data item),需要额外的数据和行为。

解决办法:将这笔数据项变成一个对象。

 

8.3   Change Value to Reference (将实值对象改为引用对象)

症状:你有一个class,衍生出许多相等实体(equal instance),你希望将它们替换为单一对象。

解决办法:将这个value object(实值对象)变成一个reference object(用于对象)

 

8.4   Change Reference to Value(将引用对象改为实值对象)

症状:你有一个reference object(引用对象),很小且不可变(immutable),而且不易管理

解决办法:将它变成一个value object(实值对象)

 

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

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

解决办法:以对象替换数组,对于数组中的每个元素,以一个值域表示之。

 

8.6   Duplicate Observed Data(复制被监视数据)

症状:你有一些domain data置身于GUI控件中,而domain method需要访问之。

解决办法:将该笔数据拷贝到一个domain object中。建立一个Observer模式,用以对domain object 和GUI object内的重复数据进行同步控制。

 

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

症状:两个classes都需要使用对方特性,但其间只有一条单向连接(one-way link)

解决办法:添加一个反向指针,并使修改函数(modifiers)能够同时更新两条连接。(这里的指针等同于句柄,修改函数指的是改变双方关系者)

 

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

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

解决办法:去除不必要的关联(association)

 

8.9   Replace Magic Number with Symbolic Constant(以符号常量/字面常量取代魔法数)

症状:你有一个字面数值(literal number),带有特别含义

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

 

8.10  Encapsulate Field(封装值域)

症状:你的class中存在一个public值域

解决办法:将它声明为private,并提供相应的访问函数(accessors)就是set get函数

 

8.11  Encapsulate Collection(封装群集)

症状:有个函数(method)返回一个群集(collection)

解决办法:让这个函数返回该群集的一个只读映件(read-only view),并在这个class中提供(添加/移除)群集元素的函数。

 

8.12  Replace Record with Data Class(以数据类取代记录)

症状:你需要面对传统编程环境中的record structure(记录结构)

解决办法:为该record(记录)创建一个哑数据对象(dumb data object)

 

8.13  Replace Type Code with Class(以类取代型别码)

症状:class之中有一个数值型别码(numeric type code),但它并不影响class的行为。

解决办法:以一个新的class替换该数值型别码(type code)

 

8.14  Replace Type Code with Subclass(以子类取代型别码)

症状:你有一个不可变(immutable)type code,它会影响class的行为。

解决办法:以一个subclass取代这个type code.

 

8.15  Replace Type Code with State/Strategy(以State/Strategy取代型别码)

症状: 你有一个type code, 它会影响class的行为,但你无法使用subclassing.

解决办法:以state object(专门用来描述状态的对象)取代type code.

 

8.16  Replace Subclass with Fields(以值域取代子类)

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

解决办法:修改这些函数,使它们返回superclass中某个新增值域,然后销毁subclasses

 

 

 

原创粉丝点击