重构是 一种对软件进行修改的行为,但它并不改变软件的功能特征,而是通过让软件程序更清晰,更简洁和更条理来改进软件的质量。代码重构之于软件,相当于结构修改 之于散文。每次人们对如何对代码进行重构的讨论就像是讨论如果对一篇文学作品进行修订一样无休无止。所有人都知道应该根据项目的自身情况来对代码进行重 构,而重构是无止境的。莫扎特从来不不对他的作品进行修订,特罗洛普对自己作品修订的恰到好处,大多数作家认为他们俩这样做都是合适的,但他们的合适对于 你我来说未必是合适的。
最常见的基本重构方法 可以归纳为两个方向。通过归纳方法将一个长的过程分解为小的可以重用的组件,和通过内联(inline)方法来消除那些不够份量的小方法。我们可以提炼方法来让大量的子类共享相同的功能特征,我们可以下放方法来让只有用到这些功能的子类才知道它们的存在。重构就是爬山,通过一步一步的小的提高来逐渐的改进整体的质量,但在重构时,我们如何知道哪种方法是上山的正确道路?
关于代码地形学的这个问题公认的方法有两种。去除有异味的代码和重构成模式。 如果能做到这样,当然是很好的。就像是纠正作文里的一个语法错误或不恰当的比喻。如果我们可以找到这些四处隐藏的有异味的代码,将它们重写成整洁的,条理 的,结构化的形式,何乐而不为。但这些都是特殊情况。如果没有明显的模式来重构,或没有很直接的方法来去除代码异味,那该怎么办呢?
这才是 我们如今编程艺术的中心问题,而很少人讨论这些。通常我们讨论这些问题时都是罗列出更多更长的有异味的代码模式的清单,但这并不是解决问题的方法。代码异 味应该是我们公认的不好的东西,而不是那些置之不理也无妨的事情。我们经常会说到老板不给我们重构的机会,甚至代码有明显的异味,老板们认为这是浪费时 间。并不是每个人都有懂软件的老板。我很吃惊为什么只有很少的讨论谈到点子上。。也许我这篇文章才说到问题关键处。
我的观点,当重构没有现成的明显的方向时,我们可以遵循下面的原则:
- 当属性、方法或类存在任何的需要复用的意向时,归纳提炼它们。
- 不要低估小方法对代码整洁的作用。使用小方法能让你节省很多笔墨。
- 能让代码长度变短的提炼都应该去提炼,包括注释。
- 用switch()代替多形——即使这样做会使代码变长。
- 用封装控制可见度。
- 消除依赖。
- 简化构造方法——即使这样做会使代码变复杂。
- 封装或避免条件表达式。使用guard语句,避免使用
else
语句。 - 使用常量代替魔幻数字。
- 不确定时,偏向使用组合而不是继承。
- 不确定时,将计算操作移入到这些数据的所有者对象里,或将数据移动到执行计算操作的对象里(也就是迪米特法则(Law of Demeter))。
- 使用小对象,松耦合,避免大对象,高聚合。
- 不确定时,偏向使用递归而不是循环。
- 使用代理对象,模拟对象和辅助对象来隔离网络,数据库,文件和用户接口。
- 不确定时,尽量在model里添加代码,必要时才往controler添加代码。view里添加的都应该是便捷功能和简写方法,但不要局限于此。
- 偏向使用apply, each, mapcar,而不是loop.
- 尽量使用新技术。
相关推荐
设计模式则为解决常见问题提供了标准的解决方案,可以用于指导重构的方向。 《重构-改善既有代码的设计》不仅仅是一本技术书籍,更是一本关于软件工程思想的书。它提倡的不仅是技术上的技巧,更是对软件开发过程的...
而性能优化反过来也能指导代码重构的方向。 - **综合考量**:在进行代码重构时考虑性能因素,在优化性能时也注意代码质量。 **结合的实践案例** - 通过重构改进代码结构,从而发现潜在的性能瓶颈。 - 实施性能优化...
- 测试驱动开发(TDD):在重构之前先编写测试,以测试驱动的方式指导重构的方向。 6. **重构的挑战与注意事项**: - 重构时机:在项目维护阶段或代码质量下降时进行,避免在项目初期过度重构。 - 重构风险:需...
5. **模式与重构的关系**:重构常常与设计模式结合使用,通过模式来指导重构的方向,让代码更加模块化,符合常见问题的解决方案。 6. **实例分析**:书中提供了大量的代码示例,展示了在不同场景下如何应用重构技术...
- **静态代码分析工具**:如SonarQube,可以帮助识别潜在的代码问题,指导重构方向。 - **版本控制系统**:Git等工具允许开发者安全地进行重构,便于对比和回滚。 6. **博文链接中的详细内容**: 博文链接提供了...
《重构:改善既有代码的设计》不仅是一本理论性强的书籍,更是一本充满实践指导意义的手册。无论是对于初学者还是有经验的开发者,都能够从中获得宝贵的知识和技巧,以帮助他们在日常工作中更好地处理代码。随着重构...
设计模式为重构提供了理论基础和指导原则,使得开发者在重构过程中有据可依,有方向可循。同时,重构又是实现设计模式的一个重要手段。通过不断的重构,开发者可以更灵活地应用设计模式,从而使得软件结构更加合理,...
### 重构(1-6).pdf 知识点解析 #### 标题解析 - **重构(1-6).pdf**:此标题表明文档主要...这些技巧不仅适用于特定的编程语言,而是贯穿于面向对象设计的原则之中,对提高代码质量和软件工程实践有着重要的指导意义。
9. **代码重构**:通过重构,将复杂代码分解为更小、更易理解的部分,同时也能发现潜在的性能瓶颈。重构时应遵循“保持行为不变”的原则,以确保优化后的代码仍然正确。 10. **持续集成与自动化测试**:建立持续...
- **代码重构**:讲解了如何在不改变代码功能的前提下,改进代码结构和性能,提高可维护性和扩展性。 #### 3. 测试与调试 - **单元测试**:强调了单元测试的重要性,提供了一系列实践技巧,确保代码的稳定性和可靠...
这些原则为敏捷开发提供了指导方向。 2. **设计原则**:书中涵盖了设计模式和SOLID原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则有助...
在这个阶段,郑吉敏提出了对重构效果的评价标准,包括业务重塑、技术共识、业务架构重建、现有痛点的解决、未来业务方向的明确以及技术债务的管理等。 通过整个重构过程,去哪儿网的酒店报价引擎不仅提高了业务逻辑...
而书中关于代码重构、测试驱动开发(TDD)以及调试技术的讨论,则是为了确保代码的长期健康与可持续发展。值得一提的是,这本书并不局限于某一特定编程语言,而是提供了一个更为宏观的视角,这使得读者可以从中提炼...
4. **重构**:当代码质量下降或结构变得复杂时,进行重构可以保持代码的清晰性和可维护性。C#的重构工具,如Visual Studio的内置重构功能,可以帮助开发者安全地改进代码结构。 5. **结对编程**:两名开发者共享一...
9. 敏捷教练与领导力:领导者在敏捷环境中扮演着促进者和支持者的角色,他们帮助团队理解和实践敏捷原则,提供必要的指导和资源。 10. 持续改进:敏捷方法鼓励团队持续学习和改进,通过反思和调整优化开发过程,...