类之间的重构

转自:http://yaotiebing.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3d%25e6%258a%2580%25e6%259c%25af%25e6%2596%2587%25e6%25a1%25a3

 

类之间的重构操作:

 

主要的内容就是分解庞大的类,合并不负责任的类,在类间搬移值域和函数。

1.   MoveMethod你的程序中,有个函数与其所在的类意外的另一个类进行更多的交流,调用后者,或者背后者调用,说明这个函数可能不适合在这个类里面,适当的时候移动到适当的类里面。减少类之间的高度耦合。让类干净利索的完成系统交付的任务。看似简单,逐渐重构直到完善,没关系,这部分重构充斥在你整个开发过程中,所以你没有必要为不能恰当的移动函数而苦恼

2.   Move Field 搬移值域:道理通搬移函数,当你某个值域与其所在的类以外的另一个类有更多的交流时,考虑搬移这个值域。这个操作很可能就是搬移Method的一部分

3.   Extract class 提炼类:就是分解类,将类中的部分值域函数搬移到一个新类里面,显然这个类做个太多的工作,包含不属于她范围内,或者类太大需要拆分。一个类应该很明确的抽象处理一些明确的责任,,如果类中的某些函数经常同事变化彼此相依,那么就考虑将他们分离出去。写到这里感觉类间的设计大部分还是根据经验开始的时候尽量明确责任,设计合理的类,随着功能的增加或者需求的变化在开发过程中逐步完善。

4.   Inline class 内嵌类: 你的某个class 没有做太多的事情,可以合并到,经常调用这个类的类中

5.   Hide delegate 隐藏委托关系: 这部分复杂一些,首先要区分sever client class

看个例子:manager = john.getdepatment().getmanager();  这里面 manager 就是client 类,而john.getdepatment()返回的部门类 就是server类,隐藏委托关系就是在johh类里面建一个函数getmanager()方法,隐藏对server类(depatment类)的调用 即:

public pserson getmanager()

{

         Return _department.getmanager();

}

那客户端类的调用就变成了: manager = john.getmanager() 看了少了什么就知道隐藏了什么。

也就是说尽量不要类的嵌套调用。

而我一般写代码都是这么设计: manager = department.getmanger(john). 需要好好理解一下设计思路,向组织靠拢

6.   Remove middle man (移除中间人操作),就是一个类做了太多的hide delegate操作,这个server类完全变成了一个中间人此时你应该让客户直接调用delegate 很难说清楚什么时候hide delegate 什么时候remove middle man 在系统运行过程中不断调整,随系统变化而变化就可以了

7.   Introduce foreign method 引用外加函数: 你所使用的server 类需要一个额外的函数,但是你不能修改这个类,那么在client类中(就是调用server类的类中)增加一个函数,并一个server class 实体作为第一引用参数,扩展server类的功能,请注意这个新加的函数是写在那个类里面了(client里面)

8.   Introduce local extension 引入本地扩展: 当原则7里面新增加的函数 被另外的多个类调用,那么就要考虑新加一个类,使他包含这些额外函数。这个本地扩展有两个方法:1.新加一个server类的子,同时为这个子类增加需要的函数   2外覆类(wrapper 其实就是新加一个类 然后在 Introduce foreign method

类间的搬移这部分就讲完了,养足精力 后面的部分就不容易理解了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值