重构——12提炼类(Extract Class)

提炼类(Extract Class)

并发和事务的风险;某个类做了两个类做的事;建立一个新类,将相关的字段和函数从旧类搬移到新类

一、动机

1、让类的抽象更清楚,让类的责任更明确

2、如果某些数据和函数总是一起出现,某些数据经常同时变化甚至彼此相依,这就表示你应该将它们分离出去

3、子类化的时候你发现某些特性需要以一种方式来子类化,另外一些特性需要以另一种方式子类化,这就意味着你需要分解原来的类

二、做法

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

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

3、建立从“旧类访问新类”的连接关系,需要的时候建立双向连接

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

5、每次搬移后,编译,测试

6、使用Move Method将必要的函数搬移到新类。先搬移较低层次的函数,再搬移较高层函数

7、每次搬移后,编译,测试

8、检查,精简每个类的接口,检查双向连接是否可以改为单项连接

9、检查是否公开新类。如果你的确需要公开它,就要决定让它成为引用对象还是不可变的值对象

时间: 2024-09-24 07:10:24

重构——12提炼类(Extract Class)的相关文章

重构——64提炼接口(Extract Interface)

提炼接口(Extract Interface) 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同:将相同的子类提炼到一个独立接口中 一.动机 1.接口对于java程序的设计方式有着巨大的影响 2.如果某个类在不同环境下扮演截然不同的角色,使用接口就是个好主意 二.做法 1.新建一个接口 2.在接口中声明待提炼类的共通操作 3.让相关的类实现上述接口 4.调整客户端的类型声明,令其使用该接口

代码重构(二):类重构规则

在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp, Replace Temp with Query, Introduce Explaining Variable, Split Temporary Variable, Remove Assignments to Parameters, Replace Method with Method Object等.关于

重构——62提炼子类(Extract Subclass)

提炼子类(Extract Subclass) 类中的某些特性只被某些实例用到:新建一个子类,将上面所说的那一部分特性移到子类中 一.动机 你发现类中的某些行为只被一部分实例用到,其他实例不需要它们 二.做法 1.为源类定义一个新的子类 2.为这个新的子类提供构造函数 3.找出调用超类构造函数的所有地点.如果它们需要的是新建的子类,令它们改而调用新的构造函数 4.逐一使用Push Down Method和Push Down Field将源类特性移到子类去 5.Replace Conditional

重构——63提炼超类(Extract Superclass)

提炼超类(Extract Superclass) 两个类有相似特性:为这两个类建立一个超类,将相同的特性搬移到超类 一.动机 减少重复代码 二.做法 1.为原本的类新建一个空白的抽象超类 2.运用Pull Up Field,Pull Up Mehtod,Pull Up Constructor Body逐一将子类的共同元素上移到超类 3.每次上移后,编译并测试 4.检查留在子类中的函数,Extract Method,Pull Up Method,也许可以Form Template Method 5

重构——72提炼继承体系(Extract Hierarchy)

提炼继承体系(Extract Hierarchy) 你有某个类做了太多工作,其中一部分工作以大量条件表达式完成 建立继承体系,以一个子类表示一种特殊情况 动机 渐进式设计

重构——1提炼函数(Extract Method)

提炼函数(Extract Method) 你有一段代码可以被组织在一起并独立出来,将这段代码放进一个独立的函数中,并让函数名称解释该函数的用途. 一.动机 1.每个函数的粒度都小,那么被复用的几率就大 2.函数的长度不是问题,关键在于函数名称和函数本体之间的语义距离 3.使高层函数读起来向一系列注释 4.如果函数都是细粒度,那么函数覆盖也会更容易些 二.做法 1.创建函数,名字要起好 2.转移代码 3.检查提炼出的代码是否引用了作用域限于原函数的变量(临时变量和源函数参数) 4.检查是否有任何的

Java JUC之Atomic系列12大类实例讲解和原理分解

在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含: 基本类:AtomicInteger.AtomicLong.AtomicBoolean: 引用类型:AtomicReference.AtomicReference的ABA实例.AtomicStampedRerence.AtomicMa

重构——13将类内联化(Inline Class)

将类内联化(Inline Class) 某各类没有做太多的事情:将这个类的所有特性搬移到另外一个类中,然后移除原类 一.动机 类萎缩了,不再承担足够的责任了 二.做法 1.在目标类身上声明public协议,并将其中所有函数委托至源类 2.修改所有源类引用点,改而引用目标类 3.编译,测试 4.运用Move Method,MoveField,将源类的特性全部搬移到目标类 5.为源类举行一个简单的丧礼

JBuilder2005实现重构之类内部提炼

1.提炼方法 对于一个方法体庞大的方法,可以使用Extract Method将其一部分代码提炼到一个小方法中,并在原处添加提炼方法的调用.如果方法中存在重复的代码段,则这个代码段很有必须提炼为一个单独的方法,以便复用. 要将一块代码提炼为一个单独的方法,只需要选中这块代码,并通过Ctrl+Shift+R->Extract Method调出提炼方法的重构对话框来进行操作.JBuilder会分析选中代码块中所引用的上下文变量,目标方法定义相应的参数,通过方法入参来传递这些变量.如下面的drive()