"《重构-改善既有代码的设计》是一本关于软件开发中重构技术的经典书籍,作者通过简体中文版将重构的理念和技术呈现给读者。书中详细列出了各种重构手法,旨在提高代码质量和可维护性,使软件设计更加优雅、高效。"
在编程领域,重构是一种重要的软件开发实践,它涉及在不改变代码外在行为的前提下,改进代码结构,以提高其可读性、可维护性和整体设计质量。书中的重构列表涵盖了许多常见的重构模式:
1. **AddParameter(添加参数)**:当一个函数需要额外信息才能正确工作时,可以增加一个参数,而不是通过其他方式传递这个信息。
2. **ChangeBidirectionalAssociationtoUnidirectional(将双向关联改为单向)**:减少对象之间的耦合,使代码更简洁,提高可理解性。
3. **ChangeReferencetoValue(将引用对象改为实值对象)**:有时,简单数据类型的使用比复杂对象更适合某些场景,这有助于减少错误和提高性能。
4. **ChangeUnidirectionalAssociationtoBidirectional(将单向关联改为双向)**:在两个类之间建立双向关系,可以简化代码,但需谨慎处理,防止循环引用问题。
5. **ChangeValuetoReference(将实值对象改为引用对象)**:当对象的状态需要被多个地方共享或更新时,使用引用对象更为合适。
6. **CollapseHierarchy(折叠继承体系)**:如果一个类层次结构过于复杂,可以通过合并子类,简化体系。
7. **ConsolidateConditionalExpression(合并条件式)**:将多个相似的条件判断合并成一个,使代码更清晰。
8. **ConsolidateDuplicateConditionalFragments(合并重复的条件片段)**:消除代码中的重复条件检查,提升代码一致性。
9. **ConvertProceduralDesigntoObjects(将过程化设计转化为对象设计)**:利用面向对象的思想改进代码结构,提高代码的模块化程度。
10. **DecomposeConditional(分解条件式)**:将复杂的条件语句拆分为更小、更易理解的部分。
11. **DuplicateObservedData(复制“被监视数据”)**:当一个对象的多个部分依赖于同一数据时,考虑创建一个共享的数据结构。
12. **EncapsulateCollection(封装群集)**:通过创建一个包装类来管理集合对象,提供更安全、更方便的访问接口。
13. **EncapsulateDowncast(封装“向下转型”动作)**:隐藏具体的类型转换细节,使得代码更易于理解和维护。
14. **EncapsulateField(封装值域)**:通过访问器和修改器方法来保护类的内部状态,防止外部直接修改。
15. **ExtractClass(提炼类)**:将一个大类的责任分解到多个小类中,遵循单一职责原则。
16. **ExtractHierarchy(提炼继承体系)**:创建新的类层次结构,以更好地反映类之间的关系。
17. **ExtractInterface(提炼接口)**:为一组类定义一个共同的接口,便于多态使用。
18. **ExtractMethod(提炼函数)**:将代码块提取成单独的函数,提高代码复用和可读性。
19. **ExtractSubclass(提炼子类)**:将一个类的特定部分提取为子类,以实现多态或定制功能。
20. **ExtractSuperclass(提炼超类)**:将几个类共有的属性和行为提取到一个超类中。
21. **FormTemplateMethod(塑造模板函数)**:使用模板方法设计模式,定义算法骨架,允许子类重写具体步骤。
22. **HideDelegate(隐藏“委托关系”)**:隐藏对象间的依赖关系,简化接口。
23. **HideMethod(隐藏某个函数)**:如果某个方法对外部没有意义,可以将其设为私有。
24. **InlineClass(将类内联化)**:如果一个类只包含一个实例,并且只用于封装另一个对象,可以考虑将其实现内联化。
25. **InlineMethod(将函数内联化)**:如果一个函数很小,且仅在一处被调用,可以将其内容直接插入调用点。
26. **InlineTemp(将临时变量内联化)**:如果一个临时变量仅用于一次计算,可以直接将计算结果放入使用它的表达式中。
27. **IntroduceAssertion(引入断言)**:在关键点添加断言,确保代码的正确性,提供调试辅助。
28. **IntroduceExplainingVariable(引入解释性变量)**:为复杂的表达式创建一个有意义的变量名,以增强代码可读性。
29. **IntroduceForeignMethod(引入外加方法)**:当需要使用另一个类的方法,但不想暴露这个依赖时,可以在当前类中引入一个包装方法。
这些重构手法是软件开发人员在维护和优化既有代码时的有力工具,通过系统地应用这些方法,可以逐步改善代码质量,降低维护成本,提升软件的整体表现。