美文网首页重构改善既有代码设计
重构-在对象之后搬移特性

重构-在对象之后搬移特性

作者: shawn_sundy | 来源:发表于2019-12-07 19:18 被阅读0次

引言

  1. 在对象的设计过程中,“决定把责任放在哪儿”是一件很重要的事情,如果出现问题则可以运用重构,改变自己原先的设计
  2. 常常只需使用Move Method(搬移函数)和Move Field(搬移字段)简单的移动对象行为,就可以解决这些问题。如果两个重构手法都有用到,一般会先使用Move Field,再使用Move Method
  3. 类往往会因为承担过多责任而变得臃肿不堪,这时就可以使用Extract Class(提炼类)将一部分责任分离出去。如果一个类变得太不负责任,则可以使用Inline Class(内联化类)将它融入另一个类中。如果一个类使用了另一个类,可以运用Hide Delegate(隐藏委托关系)将这种关系隐藏起来。有时隐藏了委托类会导致拥有者的接口经常变化,此时需要使用Remove Middle Man(移除中间人)
  4. 当不能访问某个类的源码,却又想把其他责任移进这个不可修改的类时,可以使用Introduce Foreign Method(引入外加函数)和Introduce Local Extension(引入本地扩展)。其中如果只是想加入一或两个函数,则使用Introduce Foreign Method;如果不止一两个函数,则使用Introduce Local Extension。

1. Move Method(搬移函数)

情景:有个函数与其所驻类之外的另一个类进行更多交流:调用后者,或被后者调用

做法:在该函数最常用引用的类中建立一个有些类似行为的新函数。将旧函数变成一个单纯的委托函数,或者将旧函数完全移除

动机:通过这种手段,可以是系统中的类更简单,这些类最终也将更干净利落地实现系统交付的任务

2. Move Feild(搬移字段)

情景:某个字段被其所驻类之外的另一个类更多地用到

做法:在目标类新建一个字段,修改源字段的所有用户,令它们改用新字段

3. Extract Class(提炼类)

情景:某个类做了应该由两个类做的事

做法:建立一个新类,将相关的字段和函数从旧类搬移到新类

动机:一个类应该是一个清楚的抽象,处理一些明确的责任

4. Inline Class(将类内联化)

情景:某个类没有做太多事情

做法:将这个类的所有特性搬移到另一个类中,然后移除原类

动机:正好与Extract Class相反,如果一个类不再承担足够职责、不再有单独存在的理由

5. Hide Delegate(隐藏委托关系)

情景:客户端通过一个委托类来调用另一个对象

做法:在服务类上建立客户端所需的所有函数,用以隐藏委托关系

动机:如此依赖,一旦发生变化,需要了解这一变化的对象就会比较少——这会使变化比较容易进行

6. Remove Middle Man(移除中间人)

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

做法:让客户端直接调用受托类

动机:与Hide Delegate正好相反,委托这层封装也是要付出代价的:每当客户端要使用受托类的新特性时,就必须在服务端添加一个简单委托函数,服务类完全变成一个“中间人”。

7. Introduce Foreign Method(引入外加函数)

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

做法:在客户类中建立一个函数,并以第一参数形式传入一个服务类实例

8. Introduce Local Extension(引入本地扩展)

情景:需要为服务类提供一些额外函数,但无法修改这个类

做法:建立一个新类,使它包含这些额外函数。让这个扩展品成为源类的子类或包装类

动机:如果一直把本该放在扩展类中的代码零散地放置于其他类中,最终只会让其他这些类变得过分复杂,并使得其中函数难以被复用

相关文章

  • 重构-在对象之后搬移特性

    引言 在对象的设计过程中,“决定把责任放在哪儿”是一件很重要的事情,如果出现问题则可以运用重构,改变自己原先的设计...

  • 《重构》- 在对象之间搬移特性

    一. Move Method(搬移函数) 介绍 场景你的程序中,有个函数与其所驻类之外的另一个类进行更多交流:调用...

  • 重构——在对象之间搬移特性

    在对对象的设计过程中,“决定把责任放在哪儿”即使不是最重要的事,也是最重要的事情之一。 1 Move Method...

  • 重构手法--在对象之间搬移特性

    在对象之间搬移特性 1、搬移函数 一个函数大量使用其他类的东西,高度耦合: 把函数搬到它所引用的类target c...

  • 代码重构之对象之间的搬移

    1.引言 前面把代码中函数的重构记录了下,今天在记录下在对象之间搬移特性。 2.正题 《重构改善既有代码的设计》中...

  • 重构(六)重构名录-搬移特性

    搬移函数 Move Function 模块化是优秀软件设计的核心所在,好的模块化能够让我在修改程序时只需要理解程序...

  • 重构-读书笔记二

    重构第七章主要说的是在对象之间搬移特性 先说自己的感受,这个是在面向对象设计期间非常重要而且不好把握的地方,具体的...

  • 对象间搬移特性

    "决定把责任放在哪儿”是对象技术中非常重要的事情之一。 Move Method如果某个函数与其所在之外的另一个类有...

  • 《重构》学习笔记(05)-- 在对象之间搬移特性

    在对象设计的过程中,“决定把责任放在哪儿”是最重要的事情之一。但无论使用对象技术多么娴熟,也无法保证在设计对象时一...

  • 在对象之间搬移特性

    0. 本章内容导图 1. 重构手法 1.1 搬移函数 概要:你的程序中,有个函数与其所驻类之外的另一个类进行更多交...

网友评论

    本文标题:重构-在对象之后搬移特性

    本文链接:https://www.haomeiwen.com/subject/cvougctx.html