"本书摘自关于重构的一章,讨论了重构的基本概念、原则、实践以及代码中的不良模式。" 重构是一个在软件开发过程中至关重要的实践,它涉及到改进代码结构,提高可读性和可维护性,而不改变其外在行为。在这个过程中,开发者遵循一系列规则和技巧,确保代码质量得到提升。 在《重构》的第一个案例中,作者通过一个具体的例子展示了如何开始重构。起点通常是一个需要改进的现有功能或模块。第一步是识别可以优化的部分,例如在"起点"中提到的`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)则可能是不必要的代码。 重构是提升软件质量的关键活动,涉及识别和修正代码的不良模式,以及遵循一系列原则和技巧来改进代码结构。通过不断实践和学习,开发者可以更好地掌握这一技能,从而创造出更优秀、更易于维护的软件系统。
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 26
- 资源: 335
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)