第八章 重新组织数据(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
- 第八章 重新组织数据(Organizing Data)
- 重构—改善既有代码的设计008:重新组织数据(Organizing Data)
- 《重构》读书笔记(八)——第八章 重新组织数据
- 重新组织数据(一)
- 重新组织数据(二)
- 重新组织数据(三)
- 重新组织数据之二 :Replace Data Value with Object(以对象取代数据值)
- 重新组织数据之六 :Duplicate Observed Data(复制「被监视数据」)
- 重新组织数据之十二 :Replace Record with Data Class(以数据类取代记录)
- 1、重新组织数据
- 重新组织数据
- 第8章:重新组织数据---Self Encapsulate Field(自封装字段)
- 重新组织数据之十 :Encapsulate Field(封装值域)
- 重新组织数据之十一 :Encapsulate Collection(封装群集)
- dimension reduce(梯度下降)self-organizing maps(自组织映射)
- 重构之重新组织数据
- 重构系列5.重新组织数据
- 重构方法之重新组织数据
- 用netstat查看网络状态详解
- 培养创造性思维的20个计较[转]
- Source insight 中 标题栏路径显示完整路径的方法
- Google搜索解析
- 编写自己的SD/MMC Host驱动(二):工作过程和大结局
- 第八章 重新组织数据(Organizing Data)
- Nov.16
- Oracle资料网站
- CHM格式解析
- Log4j的使用
- 关于MFC的document/view结构
- 《连线》杂志:Facebook如何战胜谷歌?
- ASP.NET MVC的运行机制--url的全局分析
- 怎样实现Android系统的HAL(硬件适配层)[转]