重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)
2017-09-20 20:37
309 查看
某个类做了过多的简单委托动作。让客户直接调用受托类。
动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处。但是这层封装也是要付出代价的,它的代价是:每当客户要使用受托类的新特性时,你就必须在服务端添加一个简单委托函数。随着委托类的特性(功能)越来越多,这一过程让你痛苦不已。服务类完全变成了“中间人”,此时你就应该让客户直接调用受托类。
很难说什么程度的隐藏才是合适的。还好,有了Hide Delegate (隐藏委托关系)和Remove Middle Man (移除中间人),你大可不必操心这个问题。因为你可以在系统运行过程中不断进行调整。随着系统的变化,“合适的隐藏程度”这个尺度也相应改变。6个月前恰如其分的封装,现今可能就显得笨拙。重构的意义在于:你永远不必说对不起—只要把出问题的地方修补好就行了。
做法:1、建立一个函数,用以获得受托对象。
2、对于每个受托函数,在服务类中删除该函数,并让需要调用该函数的客户转为调用受托对象。
3、处理每个受托函数后,编译、测试。
动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处。但是这层封装也是要付出代价的,它的代价是:每当客户要使用受托类的新特性时,你就必须在服务端添加一个简单委托函数。随着委托类的特性(功能)越来越多,这一过程让你痛苦不已。服务类完全变成了“中间人”,此时你就应该让客户直接调用受托类。
很难说什么程度的隐藏才是合适的。还好,有了Hide Delegate (隐藏委托关系)和Remove Middle Man (移除中间人),你大可不必操心这个问题。因为你可以在系统运行过程中不断进行调整。随着系统的变化,“合适的隐藏程度”这个尺度也相应改变。6个月前恰如其分的封装,现今可能就显得笨拙。重构的意义在于:你永远不必说对不起—只要把出问题的地方修补好就行了。
做法:1、建立一个函数,用以获得受托对象。
2、对于每个受托函数,在服务类中删除该函数,并让需要调用该函数的客户转为调用受托对象。
3、处理每个受托函数后,编译、测试。
相关文章推荐
- 重构手法15:Remove Middle Man (移除中间人)
- 重构改善既有代码设计--重构手法07:Remove Assignments to Parameters (移除对参数的赋值)
- 重构改善既有代码设计--重构手法09:Substitute Algorithm (替换算法)
- 重构 改善既有代码的设计:重构手法
- 重构改善既有代码设计--重构手法14:Hide Delegate (隐藏委托关系)
- 重构改善既有代码设计--重构手法16:Introduce Foreign Method (引入外加函数)&& 重构手法17:Introduce Local Extension (引入本地扩展)
- 重构改善既有代码设计--重构手法04:Replace Temp with Query (以查询取代临时变量)
- 重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)
- 重构改善既有代码设计--重构手法18:Self Encapsulate Field (自封装字段)
- 重构改善既有代码设计--重构手法19:Replace Data Value with Object (以对象取代数据值)
- 重构改善既有代码设计--重构手法01:Extract Method (提炼函数)
- 重构改善既有代码设计--重构手法10:Move Method (搬移函数)
- 重构改善既有代码设计--重构手法12:Extract Class (提炼类)
- 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)
- 重构改善既有代码设计--重构手法13:Inline Class (将类内联化)
- 『重构--改善既有代码的设计』读书笔记----Remove Assignments to Parameters
- 『重构--改善既有代码的设计』读书笔记----Remove Middle Man
- 重构改善既有代码设计--重构手法08:Replace Method with Method Object (以函数对象取代函数)
- 读《重构-改善既有代码的设计》有感
- 重构--改善既有代码的设计--读书笔记1