本PDF文档探讨了如何通过重构优化现有代码设计,提升软件质量与可维护性。适合软件开发人员阅读和实践。
第一章:重构案例
1.1 起点
1.2 重构的第一步
1.3 分解并重组statement()函数
1.4 运用多态取代与价格相关的条件逻辑
1.5 结语
第二章:重构原则
2.1 什么是重构
2.2 为什么需要进行重构
2.3 在什么时候进行重构
2.4 如何向经理解释重构的必要性
2.5 重构中遇到的问题和挑战
2.6 重构与设计的关系
2.7 重构对程序性能的影响
2.8 重构的历史背景
第三章:代码中的坏味道
3.1 DuplicatedCode(重复代码)
3.2 LongMethod(过长函数)
3.3 LargeClass(过大类)
3.4 LongParameterList(参数列表太长)
3.5 DivergentChange(发散式变化)
3.6 ShotgunSurgery(霰弹式修改)
3.7 FeatureEnvy(依恋情结)
3.8 DataClumps(数据泥团)
3.9 PrimitiveObsession(基本类型偏执症)
3.10 SwitchStatements(switch惊悚现身)
3.11 ParallelInheritanceHierarchies(平行继承体系)
3.12 LazyClass(懒惰类)
3.13 SpeculativeGenerality(夸夸其谈的未来性)
3.14 TemporaryField(令人迷惑的临时字段)
3.15 MessageChains(过度耦合的消息链)
3.16 MiddleMan(中间人模式)
3.17 InappropriateIntimacy(狎昵关系)
3.18 AlternativeClasseswithDifferentInterfaces(异曲同工的类)
3.19 IncompleteLibraryClass(不完善的库类)
3.20 DataClass(纯稚的数据类)
3.21 RefusedBequest(被拒绝的继承权)
3.22 Comments(过多注释)
第四章:构建测试体系
4.1 自动化测试的价值
4.2 使用JUnit进行单元测试
4.3 增加更多测试用例
第五章:重构列表
5.1 重构记录格式
5.2 寻找引用点
5.3 这些重构手法的成熟度
第六章:重新组织函数
6.1 ExtractMethod(提炼方法)
6.2 InlineMethod(内联方法)
6.3 InlineTemp(内联临时变量)
6.4 ReplaceTempwithQuery(以查询取代临时变量)
6.5 IntroduceExplainingVariable(引入解释性变量)
6.6 SplitTemporaryVariable(分解临时变量)
6.7 RemoveAssignmentstoParameters(移除对参数的赋值)
6.8 ReplaceMethodwithMethodObject(用方法对象替换方法)
6.9 SubstituteAlgorithm(替换算法)
第七章:在对象之间搬移特性
7.1 MoveMethod(移动方法)
7.2 MoveField(移动字段)
7.3 ExtractClass(提炼类)
7.4 InlineClass(将类内联化)
7.5 HideDelegate(隐藏委托关系)
7.6 RemoveMiddleMan(移除中间人模式)
7.7 IntroduceForeignMethod(引入外加方法)
7.8 IntroduceLocalExtension(引入本地扩展)
第八章:重新组织数据
8.1 SelfEncapsulateField(自封装字段)
8.2 ReplaceDataValuewithObject(以对象取代数据值)
8.3 ChangeValuetoReference(将值类型改为引用类型)
8.4 ChangeReferencetoValue(将引用类型改为值类型)
8.5 ReplaceArraywithObject(用对象替换数组)
8.6 DuplicateObservedData(复制被观察的数据)
8.7 ChangeUnidirectionalAssociationtoBidirectional(把单向关联变双向关联)
8.8 ChangeBidirectionalAssociationtoUnidirectional(将双向关联改为单向关联)
8.9 ReplaceMagicNumberwithSymbolicConstant(用符号常量代替魔法数)
8.10 EncapsulateField(封装字段)
8.11 EncapsulateCollection(封装集合类型)
8.12 ReplaceRecordwithDataClass(以数据类替换记录结构)
8.13 ReplaceTypeCodewithClass(使用类替代类型码)
8.14 ReplaceTypeCodewithSubclasses(用子类代替类型码)
8.15 ReplaceTypeCodewithState/Strategy(用状态策略模式取代类型码)
8.16 ReplaceSubclasswithFields(以字段替换子类)
第九章:简化条件表达式
9.1 DecomposeConditional(分解复杂条件语句)
9.2 ConsolidateConditionalExpression(合并相似的条件表达式)
9.3 Consolidate