重构改善既有代码设计-----重新组织数据结构

重新组织数据结构

 

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

       为这个字段建立取值/设置函数,并且只以这些函数来访问字段

2、以对象取代数据值(Replace data value withobject)

       业务的发展,以前简单的数据项,慢慢有了一些行为,这种情况应该将这些数据和行为抽象成对象,用对象代替数据

3、将值对象改成引用对象(Change value to reference)

       将一个类创建出很多相等的实例被分散引用,改为只创建一个实例被引用

4、将引用对象改成值对象(Change Refence to Value)

       小的引用对象,不可变,且难以管理,则可以考虑改成值对象

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

       数组中的各个元素代表不同的东西,用对象取代数组,对象的字段分别代表数组不同的值

6、复制被监视数据(Duplicate Observed data)

       将GUI数据和领域数据分开,使用Observer模式同步两者的数据,实现业务与展示解耦

7、将单项关联改为双向关联(Change UnidirectionalAssociation to Bidirectional)

       两个类都需要使用对方的特性,则可以使用双向关联,使其修改函数能够同时修改两个类型

8、将双向关联改成单项关联(Change BidirectionalAssociation to Unidirectional)

       以前是双向关联的两个,但是现在一个类已经不再需要对方的特性,应该将这种双向关联简化成单向关联

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

       用常量取代具有特殊意义的字面数值

10、封装字段(Encapsulate Field)

       将字段生命为private,提供get/set访问函数

11、封装集合(Encapsulate Collection)

       对于类中的集合,函数不应该直接返回集合引用,而是返回该集合的副本,同时亦不能直接修改该集合的引用,应由该类提供相关函数去向该集合添加、删除元素

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

       用对象代替记录结构

13、以类取代类型码(Replace Type Code with Class)

       以类代替不影响类行为的类型码,提高代码可读性及数据类型强校验

14、以子类取代类型码(Replace Type Code with Subclasses)

       以子类取代不可变的,且会影响类行为的类型码

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

       当无法使用继承消除类型码时,可以使用状态对象取代类型码

16、一字段代替子类(Replace Subclass with Fields)

       如果子类的唯一差别是返回不同的常量,那么子类继承价值不高,则用字段代替常量,取消子类

 

总结:使用Replacevalue with Object将“哑”数据变成善于表达的对象;如果发现程序很多地方引用同一类对象,可以使用Change Value to Reference将他们变成引用对象;使用常量消除魔法数;对象之间的关联可以单向的也可以是双向的,按业务决定,当然越简单越好;不要讲GUI数据和业务数据混淆在一起,用DuplicateObserved data重构它;还就是就是消除类型码的几种方式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值