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 原函数,或者提供包装类
分享到:
相关推荐
#### 对象间搬移特性的具体重构方法 ##### Move Method(搬移函数) 当一个类中的方法与其他类有太多交集时,可以在另一个类中创建一个功能相似的新函数,然后将原函数转换为纯代理函数(Delegating Method),...
例如,“神秘命名”、“重复代码”、“过长函数”和“发散式变化”等,这些都是代码库中经常需要关注的重构对象。通过系统地识别和修复这些坏味道,代码库的质量将得到明显改善。 此外,构筑有效的测试体系是重构...
章节七 在对象之间搬移特性 章节八 重新组织数据 章节九 简化条件表达式 章节十 简化函数调用 章节十一 处理概括关系 章节十二 大型重构 章节十三 重构,复用与现实 章节十四 重构工具 章节十五 集成
第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章 在对象之间搬移特性 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 ...
第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...
3. **在对象之间搬移特性**: - **搬移函数**:当一个函数与其所在类的关系不匹配时,可以将其移动到更合适的类中,减少不必要的耦合。 - **搬移字段**:如果某个字段在其他类中被频繁使用,可以将其移动到使用...
第7章 在对象之间搬移特性 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 ...
- 在对象之间搬移特性:调整类或对象的属性和方法,使其更合理地存在于它们所属的地方。 - 重新组织数据:调整数据结构来改善系统的行为。 - 简化条件表达式:清理复杂的条件语句。 - 简化函数调用:使函数调用更...
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集成到日常文件维护和自动化任务中。了解并熟练掌握这些知识,对于开发...