-
重构
2020-07-04 13:10:21重构概念 重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。 在保持功能不变的前提下,利用设计思想、原则、模式、编程规范等理论来优化代码,修改设计上的...重构概念
- 重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。
- 在保持功能不变的前提下,利用设计思想、原则、模式、编程规范等理论来优化代码,修改设计上的不足,提高代码质量。
为什么要重构?
- 重构是时刻保证代码质量的一个极其有效的手段,不至于让代码腐化到无可救药的地步。
- 项目在演进,代码不停地在堆砌,代码总是会往越来越混乱的方向演进。
- 优秀的代码或架构不是一开始就能完全设计好的,随着系统的演进,重构代码也是不可避免的。
- 重构是避免过度设计的有效手段。
- 将一个比较烂的代码重构成一个比较好的代码,会让你很有成就感。对一个工程师本身技术的成长也有重要的意义。初级工程师在维护代码,高级工程师在设计代码,资深工程师在重构代码。
重构的方式:
- 大型重构指的是对顶层代码设计的重构,包括:系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象可复用组件等等。
- 小型重构指的是对代码细节的重构,主要是针对类、函数、变量等代码级别的重构,比如规范命名、规范注释、消除超大类或函数、提取重复代码等等。
对重构的态度:
- 寄希望于在代码烂到一定程度之后,集中重构解决所有问题是不现实的,保持持续重构。
单元测试(Unit Testing)- 最可落地执行、最有效的保证重构不出错的手段:
- 单元测试是代码层面的测试,由研发自己来编写,用于测试“自己”编写的代码的逻辑的正确性。
- 写单元测试的过程本身就是代码 Code Review 和重构的过程,能有效地发现代码中的 bug 和代码设计上的问题。对集成测试的有力补充、帮助我们快速熟悉代码、TDD 可落地执行的改进方案。
- 如何编写单元测试?写单元测试就是针对代码设计各种测试用例,以覆盖各种输入、异常、边界情况,并将其翻译成代码。
- 写单元测试尽管繁琐,但并不是太耗时;放低对单元测试代码质量的要求;覆盖率作为衡量单元测试质量的唯一标准是不合理的;单元测试不要依赖被测代码的具体实现逻辑;单元测试框架无法测试,多半是因为代码的可测试性不好。
- 单元测试为何难落地执行?写单元测试本身比较繁琐,技术挑战不大,很多程序员不愿意去写;开发进度紧,执行虎头蛇尾。
代码的可测试性:
- 针对代码编写单元测试的难易程度
- 依赖注入是编写可测试性代码的最有效手段
常见的测试不友好的代码:
- 代码中包含未决行为逻辑
- 滥用可变全局变量
- 滥用静态方法
- 使用复杂的继承关系
- 高度耦合的代码
解耦 - 大型重构的有效手段
- 解耦保证代码松耦合、高内聚,是控制代码复杂度的有效手段。代码高内聚、松耦合,意味着代码结构清晰、分层模块化合理、依赖关系简单、模块或类之间的耦合小,那代码整体的质量不会差。
- 是否需要解耦?修改代码是否牵一发而动全身;模块与模块、类与类之间的依赖关系画出来看复杂性
- 给代码解耦的方法有:封装与抽象、中间层、模块化、设计思想与原则(单一职责原则、基于接口而非实现编程、依赖注入、多用组合少用继承、迪米特法则等)、设计模式(观察者模式等)。
图:思维导图
【Java学习资源】整理推荐
【Java面试题与答案】整理推荐
收藏数
70,942
精华内容
28,376
-
美国犯罪数据可用于研究犯罪
-
基于C#制作的RGB取值器
-
动态规划(二)——刷题 + 优化
-
PHP支付宝微信支付配置教程
-
php 正则判断是否是手机号码
-
阿里云云计算ACP考试必备教程
-
echarts——配置总结及个别案例演示
-
2020-10-18-kali搭建DVWA.md
-
将人从图像中抠取出来
-
微服微服微服务.rar
-
File
-
【数据分析-随到随学】Spark理论及实战
-
java微服务常用技术整合
-
Python入门
-
包装类
-
ProBuilder快速原型开发技术
-
云计算基础-Linux系统管理员
-
VB6.0中代码动态加载控件.txt
-
[BJDCTF2020]Easy MD5
-
VisualSFM_windows_64bit