`
hudeyong926
  • 浏览: 2031717 次
  • 来自: 武汉
社区版块
存档分类
最新评论

重构 对象之间搬移特性

 
阅读更多

Move Method

如果一个类中的方法与另一个类有很多的交流,那么我们就在另一个类中建立一个有类似功能的新函数,将旧函数变成一个单纯的Delegating Method, 或是将旧函数移除。


Move Field

 状况:你的class中的field被另一个class更多的用到。那么在另一个class里建立new field,修改旧的field。


Extract Class

状况:一个类做了两个类做的事,那么建立一个新Class,将相关的Field和Method从旧Class移到新Class


Inline Class

状况:你的某个Class没有做太多事情(没有承担足够责任),那么将Class的所有特性搬移到另一个Class中,然后移除原Class。
动机:Inline Class与Extract Class相反。——把Extract Class例子反过去,因为PhoneNumber只用作读取code和number。

Hide Delegate

状况:客户直接调用Server Object的Delegate Class的Method,那么在Server端建立客户所需的函数Method,用以隐藏委托关系。
学过面向对象技术的人都知道,虽然php允许你将field声明为public,但你还应该隐藏field(private)。随着经验日渐丰富,有更多值得封装的东西。看下面一个例子:


Remove Middle Man
状况:如果某个Class做了过多的Simple Delegate,那么我们就直接调用Delegate Class。
动机:在Hide Delegate中的例子里当Department有更多新方法的时候,我们为了Hide Delegate,就要必须在Person里添加相应的方法做Delegate之用。这时候的Person完全变成了一个Middle Man,此时我们就应该直接调用Delegate Class——Department。重构的意义就在于:你永远不必说对不起,只要你把出问题的地方修补好就行了。



Introduce Foreign Method

状况:有一个类Client需要使用的类PreviousEnd中一个额外函数,但你无法修改这个类PreviousEnd,那么你就在Client中建立一个函数,并以一个PreviousEnd实体做为参数。


Introduce Local Extention

状况:你的Class需要一些额外函数,但你不能修改当前的类,那么建立一个新Class,使它包含这些函数。使用Subclass 或 Wrapper。——这个一般用于你无法修改源码的情况下使用。

拿上面Introduce Foreign Method例子来说

 使用Subclass方法

 或使用Wrapper

总结

需要注意一下,“Extract Class”和“Inline Class”,”Hide Delegate“和”Remove Middle Man",都是相反的过程,具体理解,可以看前言中的那张流程图。
“Hide Delegate"我们常用于使用少量的”Delegate Method“的时候,而”Remove Middle Man“,用于调用很多”Delegate Method“的时候,我们可以直接使用Delegate Class,进行调用,而有的Delegate Method我们视情况保留一部分。
“Extract Class”和“Inline Class”,"Extract Class"经常用于承担那过多责任而变得臃肿不堪的Class中,而“Inline Class”经常用于当前的这个类”太不负责的“时候使用。——我个人是宁愿“Extract Class”,也不愿“Inline Class”。


 
  • 大小: 88.2 KB
  • 大小: 117.6 KB
  • 大小: 608 Bytes
  • 大小: 102.5 KB
  • 大小: 117.1 KB
  • 大小: 57.5 KB
  • 大小: 106.7 KB
  • 大小: 208 KB
  • 大小: 202.7 KB
  • 大小: 193.6 KB
  • 大小: 171.8 KB
  • 大小: 167 KB
  • 大小: 174.2 KB
  • 大小: 145.5 KB
  • 大小: 137.2 KB
  • 大小: 207.6 KB
分享到:
评论

相关推荐

    PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性

    #### 对象间搬移特性的具体重构方法 ##### Move Method(搬移函数) 当一个类中的方法与其他类有太多交集时,可以在另一个类中创建一个功能相似的新函数,然后将原函数转换为纯代理函数(Delegating Method),...

    重构-改善既有代码的设计(chm清晰版)

    章节七 在对象之间搬移特性 章节八 重新组织数据 章节九 简化条件表达式 章节十 简化函数调用 章节十一 处理概括关系 章节十二 大型重构 章节十三 重构,复用与现实 章节十四 重构工具 章节十五 集成

    重构改善既有代码的设计第2版.pdf

    8. 搬移特性:包括搬移函数、搬移字段、搬移语句到函数、搬移语句到调用者、以函数调用取代内联代码、移动语句、拆分循环、以管道取代循环等。 本书为读者提供了一个系统的指南,帮助读者了解如何通过重构来改善既...

    重构-改善既有代码的设计

    第7章 在对象之间搬移特性 141 7.1 Move Method(搬移函数) 142 7.2 Move Field(搬移字段) 146 7.3 Extract Class(提炼类) 149 7.4 Inline Class(将类内联化) 154 7.5 Hide Delegate(隐藏“委托...

    重构:改善既有代码的设计(中文高清版)

    第7章 在对象之间搬移特性141 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 7.6 ...

    重构:改善既有代码的设计.[美]Martin Fowler.epub【文字版手机格式】

    第7章 在对象之间搬移特性 7.1 Move Method(搬移函数) 7.2 Move Field(搬移字段) 7.3 Extract Class(提炼类) 7.4 Inline Class(将类内联化) 7.5 Hide Delegate(隐藏“委托关系”) 7.6 Remove Middle Man(移除...

    重构:改善既有代码的设计(中文版).

    第7章 在对象之间搬移特性141 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 7.6 ...

    《重构改善既有代码的设计(2010年版)》(Martin Fowler[美] 著,熊节 译)

    第7章 在对象之间搬移特性141 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 7.6 ...

    产品中的代码重构.pdf

    3. **在对象之间搬移特性**: - **搬移函数**:当一个函数与其所在类的关系不匹配时,可以将其移动到更合适的类中,减少不必要的耦合。 - **搬移字段**:如果某个字段在其他类中被频繁使用,可以将其移动到使用...

    大三下学期3.2重构引导课 .pdf

    - 在对象之间搬移特性:调整类或对象的属性和方法,使其更合理地存在于它们所属的地方。 - 重新组织数据:调整数据结构来改善系统的行为。 - 简化条件表达式:清理复杂的条件语句。 - 简化函数调用:使函数调用更...

    重构_改善既有代码的设计

    第7章 在对象之间搬移特性  7.1 MoveMethod(搬移函数)142  7.2 MoveField(搬移字段)146  7.3 ExtractClass(提炼类)149  7.4 InlineClass(将类内联化)154  7.5 HideDelegate(隐藏“委托关系”)157  ...

    重构-改善既有代码的设计 中文版

    第7章 在对象之间移动特性 7.1 Move Method(搬移函数) 7.2 Move Field(搬移值域) 7.3 Extract Class(提炼类) 7.4 Inline Class(将类内联化) 7.5 Hide Delegate(隐藏「委托关系」) 7.6 Remove Middle Man...

    重构改善既有代码的设计-Refactoring:Improving the Design of Existing Code

    2. **在对象之间搬移特性**:根据对象之间的关系,合理调整成员变量和方法的位置,以提高代码的逻辑一致性。 3. **重新组织数据**:如将全局变量转化为局部变量或封装到类中,以降低代码的耦合度。 4. **简化条件...

    重建——改善既有代码的设计

    第7章 在对象之间搬移特性141 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 7.6 ...

    重构-改善既有代码的设计(简体中文)

    通过将过程化的代码转化为面向对象的设计,可以利用封装、继承和多态等特性,提高代码的复用性和模块化程度。 ### 7. 提炼类(Extract Class) 当一个类承担了过多的职责时,可以通过提炼类的方法,将部分职责分离...

Global site tag (gtag.js) - Google Analytics