《重构》的笔记-第1页
- 章节名:1
- 页码:第1页 2015-04-01 14:50:12
重构:对软件结构内部的一种调整,使在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本重构和添加新功能:分清处在何种状态。为何重构? >改进软件设计 >使软件更容易理解 >帮你找到bug >提高编程速度何时重构? >三次法则:事不过三,三则重构 >添加新功能时重构 >修补错误时重构 >复审代码时重构 重构的难题? >数据库(数据迁移,结构改变) >修改接口何时不该重构? >代码测试大段错误,无法运行(还不如重写) >项目接近最后期限编程中的坏味道检查表(可能需要重构的检查表)?Duplicated Code :重复代码Long Method:过长函数Large Class:过大的类Long Parameter List:过长参数列Divergent Change:发散式变化-->一个类受多种变化影响Shotgun Surgery:散弹式修改-->一种变化引发多个类的相应修改Feature Envy:依恋情绪--> 将总是一起变化的东西放到一块 Data Clumps:数据泥团-->很多地方都能看到的相同的数据项,提取到一块Primitive Obsession:基本类型偏执 -->考虑封装对象Switch Statements: ---> 考虑使用多态Parallel Inheritance Hierarchies :平行继承体系-->Shotgun Surgery 特殊情况Lazy Class:冗赘类 -->如果某些子类没有做足够的工作,去掉他们Speculative Generality:夸夸其谈未来性Temporary Field:令人迷惑的暂时字段Message Chains:过度耦合的消息链Middle Man:中间人,委托..Inappropriate Intimacy:狎昵关系 -->关系过于亲密Alternative Classes WithDifferent Interfaces:异曲同工的类Incomplete Library Class:不完美的库类Data Class:纯粹的数据类Refused Bequest:被拒绝的遗赠Comments:过多的注释重构的记录格式?名称:概要:动机:做法:范例:重构清单:-------------------------------------------------------------------------------------------------------------方法提取:Extract Method(提取函数):Inline Method(内联函数):在函数调用点插入本体,然后移除该函数Inline Temp(内联临时变量):将所有对该变量的引用动作替换为对它赋值的那个表达式自身Replace Temp with Query(以查询取代临时变量)Introduce Explaining Variable(引入解释性变量):将复杂表达式或其中一部分的结果放进一个临时变量,以此变量名称来解释表达式用途Split Temporary Variable(分解临时变量):针对每次赋值,创造一个独立、对应的临时变量Remove Assignments to parameters(移除对参数的赋值):以一个临时变量取代该参数的位置 ::::Java使用按值传递的函数调用方式Replace Method with Method Object(以函数对象取代函数):将这个函数放进一个单独对象中,如果一来局部变量就成了对象内的字段,然后你可以在同一个对象中将这个大型函数分解为多个小型函数iSubstitute Algorithm(替换算法):将函数本体替换为另一个算法-------------------------------------------------------------------------------------------------------------在类之间搬移特性:Move Method(搬移函数):在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移除 "这个函数与哪个对象的交流比较多决定其移动路径"Move Field(搬移字段):在目标类新建一个字段,修改源字段的所有用户,令它们改用新字段Extract Class(提炼类):建立一个新类,将相关的字段和函数从旧类搬移到新类Inline Class(将类内联化):将这个类的所有特性搬移到另一个类中,然后移除原类Hide Delegate(隐藏委托关系):在服务类上建立客户所需的所有函数,用以隐藏委托关系Remove Middle Man(移除中间人):让客户直接调用委托类Introduce Foreign Method(引入外加函数):在客户类中建立一个函数,并以第一参数形式传入一个服务类实例Introduce Local Extension(引入本地扩展):建立一个新类,使它包含这些额外函数,让这个扩展品成为源类的子类或包装类
1人阅读
说明 · · · · · ·
表示其中内容是对原文的摘抄