重构:改善既有代码的设计

需积分: 0 0 下载量 137 浏览量 更新于2024-06-30 收藏 39.15MB DOCX 举报
"本书摘自关于重构的一章,讨论了重构的基本概念、原则、实践以及代码中的不良模式。" 重构是一个在软件开发过程中至关重要的实践,它涉及到改进代码结构,提高可读性和可维护性,而不改变其外在行为。在这个过程中,开发者遵循一系列规则和技巧,确保代码质量得到提升。 在《重构》的第一个案例中,作者通过一个具体的例子展示了如何开始重构。起点通常是一个需要改进的现有功能或模块。第一步是识别可以优化的部分,例如在"起点"中提到的`statement()`方法。接下来,对这个方法进行分解和重组,通过一系列小步骤逐步改进。这些步骤包括:首先,将计算金额的代码分离出来;然后,提炼出常客积分计算的独立逻辑;接着,消除临时变量以减少代码复杂性;最后,利用多态来替换与价格相关的条件逻辑,使得代码更加简洁且易于扩展。 重构的原则涵盖了多个方面。"What"部分明确了重构的定义,作为名词,它表示对内部结构的改进;作为动词,它是持续进行的过程。"Why"部分解释了重构的重要性,包括改善软件设计、增进代码理解、便于查找和修复bug,以及提高编程效率。"When"部分建议在添加功能、修复错误或进行代码审查时进行重构。 然而,重构并非总是简单的,也存在一些挑战,如处理数据库变更、调整接口、面对无法通过重构轻易解决的设计更改。有时,考虑到潜在的风险和成本,可能需要避免重构。此外,重构与设计和性能之间需要找到平衡,既要保持良好的设计,也要注意不要过度重构导致性能下降。 书中列举了一系列代码的"坏味道",这些是代码质量低下的标志。例如,重复代码(Duplicated Code)可能导致维护困难;过长函数(Long Method)使得代码难以理解和测试;过大的类(Large Class)可能职责过多;过长参数列表(Long Parameter List)增加了调用者的负担;发散式变化(Divergent Change)意味着一个类需要在不同方向上同时修改;霰弹式修改(Shotgun Surgery)指为了修改一处功能而广泛修改代码;依恋情节(Feature Envy)表明一个方法可能应该属于另一个类;数据泥团(Data Clumps)暗示可能需要一个新的类或数据结构;基本类型偏执(Primitive Obsession)可能导致过度使用简单类型;switch惊悚现身(Switch Statements)可能提示需要多态;平衡继承体系(Parallel Inheritance Hierarchies)指出可能存在的设计问题;冗赘类(Lazy Class)则可能是不必要的代码。 重构是提升软件质量的关键活动,涉及识别和修正代码的不良模式,以及遵循一系列原则和技巧来改进代码结构。通过不断实践和学习,开发者可以更好地掌握这一技能,从而创造出更优秀、更易于维护的软件系统。