`
nbkangta
  • 浏览: 431698 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

《重构》之对象搬移特性

 
阅读更多

1、Move Method 搬移函数

有个函数语气所住类之外的另一个类进行更多交流

做法:

检查源类中被源函数所使用的一切特性(包括字段和函数),考虑他们是否也该被搬移

检查源类的子类和超类,看看是否有该函数的其他声明

在目标类中声明这个函数

将源函数的代码复制到目标函数中,调整后者,使其能在新家中正常运行

编译目标类

决定如何从源函数正确应用目标对象

修改源函数,使之成为一个纯委托函数

编译测试

决定是否删除源函数,或将它当做一个委托函数保留下来

如果要移除源函数,请将源类中对源函数的所有调用,替换为对目标函数的调用

编译测试

 

2、Move Field 搬移字段

你的程序中,某个字段被其所住之外的另一个类更多的用到

做法:

如果字段的访问级是public,使用Encapsulate Field将它封装起来

编译测试

在目标类中建立与源字段相同的字段,并同时建立相应的设值/取值函数

编译目标类

决定如何在源对象中引用目标对象

删除源字段

将所有对源字段的引用替换为对某个目标函数的调用

编译测试

 

3、Extract Class 提炼类

  某个类做了应该由两个类做的事

做法:

决定如何分解类所负的责任

建立一个新类,用以表现从旧类中分离出来的责任

建立“从旧类访问新类”的连接关系

对于你想搬移的每一个字段,运用Move Field搬移之

每次搬移后,编译测试

使用Move Method将必要函数搬移到新类。先搬移入扇大于出扇的函数

每次搬移之后,编译测试

检查,精简每个类

决定是否公开新类

 

4、 Inline Class 将类内联化

某个类没有做太多事情

做法:

在目标类身上声明源类的public协议,并将其中所有函数委托至源类

修改所有源类引用点,改而引用目标类

编译测试

运用Move Method和Move Field 将源类的特性全部搬移到目标类

为源类举行一个简单的“丧礼”

 

5、Hide Delegate 隐藏“委托关系”

客户通过一个委托关系来调用另一个对象

做法:

对于每一个委托关系中的函数,在服务对象端建立一个简单的委托函数

调整客户,令它只调用服务对象提供的函数

每次调整后,编译并测试

如果将来不再有任何客户需要取用受托类,便可移除服务对象中的相关访问函数

编译测试

 

6、Remove Middle Man 移除中间人

某个类做了过多的简单委托动作

做法:

建立一个函数,用以获得受托对象

对于每个委托函数,在服务类中删除该函数,并让需要调用该函数的客户转为调用受托对象

处理每个委托函数后,编译测试

 

7、Introduce Foreign Method 引入外加函数

你需要为提供服务的类增加一个函数,但你无法修改这个类

 

8、Introduce Local Extension 引入本地扩展

同7,做法有两种,extends 原函数,或者提供包装类

 

 

分享到:
评论

相关推荐

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

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

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

    例如,“神秘命名”、“重复代码”、“过长函数”和“发散式变化”等,这些都是代码库中经常需要关注的重构对象。通过系统地识别和修复这些坏味道,代码库的质量将得到明显改善。 此外,构筑有效的测试体系是重构...

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

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

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

    第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(隐藏“委托...

    重构:改善既有代码的设计.[美]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 ...

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

    第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 ...

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

    第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...

    产品中的代码重构.pdf

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

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

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

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

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

    重构改善既有代码的设计-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) 当一个类承担了过多的职责时,可以通过提炼类的方法,将部分职责分离...

    用PHP实现维护文件代码

    这包括简化函数调用、条件表达式、数据组织以及对象特性的搬移等。 这些知识点涵盖了PHP文件操作的基本使用和实践技巧,同时也展示了如何将PHP集成到日常文件维护和自动化任务中。了解并熟练掌握这些知识,对于开发...

Global site tag (gtag.js) - Google Analytics