一、代码重构
软件开发中,代码质量与其整洁度成正比,干净的代码,既在质量上可靠,也为后期维护、升级奠定了良好基础。
实际开发中,我们经常听到”重构”二字。重构既不修正错误,又不增加新的功能性。反而它是用于提高代码的可读性或者改变代码内部结构与设计,并且移除死代码,使其在将来更容易被维护。
关于重构说明,如下图所示:
二、常用的重构方法
1.封装成员变量(Encapsulate Field)
将仅限于本类使用的变量重写成私有(private)成员变量,并提供访问方法(accessor method)。这种重构方式可以将与外部调用者无关的变量隐藏起来,减少代码的耦合性,并减少意外出错的概率。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// 重构前
classSomeClass{
publicintmemberA;
...
}
// 重构后
classSomeClass{
privateintmemberA;
publicintgetMemberA();
publicvoidsetMemberA(inta);
...
}
|
2.提取方法(Extract Method)
将大段代码中的一部分提取后,构成一个新方法。这种重构可以使整段程序的结构变得更清晰,从而增加可读性。这也对函数(Function)通用。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
// 重构前
voidProcess(MyDataSet mds)
{
// Step 1 ...
intresult=0;
if(mds.isReady)
{
intdata1=mds.param[0];
intdata2=mds.param[1];
// Preprocess...
result=data1%data2;
}
// Step 2...
}
// 重构后
voidProcess(MyDataSet mds)
{
// Step 1 ...
intresult=0;
if(mds.isReady)
result=CalculateMDS(mds.param[0],mds.param[1]);
// Step 2 ...
}
intCalculateMDS(intdata1,intdata2)
{
// Preprocess...
returndata1%data2;
}
|
3.一般化类型(Generalize Type)
将多个类/函数共用的类型抽象出可以公用的基类(base class),然后利用多态性追加每个类/函数需要的特殊函数。这种重构可以让结构更加清晰,同时可以增加代码的可维护性。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
// 重构前
classRectangle{
private:
intw,h;
public:
doubleArea(){
returnw*h;
}
}
classTriangle{
private:
intw,h;
public:
doubleArea(){
returnw*h/2;
}
}
// 重构后
classPolygon{
private:
intw,h;
public:
virtualdoubleArea()=0;
}
classRectangle:publicPolygon{
doubleArea(){
returnw*h;
}
}
classTriangle:publicPolygon{
doubleArea(){
returnw*h/2;
}
}
|
4.函数归父(Pull Up)
将方法从子类移动到父类。
5.函数归子(Push Down)
将方法从父类移动到子类。
6.方法更名(Rename Method)
方法从父类移动到子类。
示例代码:
|
// 重构前
publicdoublef(doublem,doublea);
// 重构后
publicdoublecalculateForce(doublemass,doubleacceleration);
|
分享到:
相关推荐
【摘要】本文主要探讨了设计模式在Android应用开发中的重要性,特别是在代码重构过程中的应用。随着Android系统的广泛使用和应用市场的激烈竞争,开发者面临着提升代码质量和运行效率的压力。文章指出,代码重构是...
【CSS代码重构】是优化和改进现有CSS代码的过程,旨在提高代码的可读性、可维护性和性能,同时保持原有功能不变。重构的关键在于改善代码结构,使其更符合最佳实践和设计模式,以便团队协作和长期项目的可持续发展。...
重构,简单来说,就是对现有的代码或数据库结构进行改进,以提高其性能、可读性和可维护性,而SQL重构则是针对数据库查询语句进行优化的过程。 在PWMIS系统中,SQL重构主要涉及以下几个方面: 1. **查询优化**:在...
《重构思路浅谈:最后一根稻草型时机》 重构,是软件开发过程中不可或缺的一环,旨在提升代码质量,改善系统架构,确保系统的可持续性和稳定性。本文将探讨一种特殊的重构时机——“最后一根稻草”型时机,以及重构...
"浅谈vue项目重构技术要点和总结" Vue 项目重构技术要点和总结 一、Vue 数据更新,视图未更新 在 Vue 项目中,我们经常会遇到一个问题,即数据更新了,但是视图没有更新。这个问题的解决方案有多种,以下是其中...
” MartinFowler(重构那本书的作者)曾经写过一篇博客来讨论这个问题,他指出:把测试覆盖作为质量目标没有任何意义,而我们应该把它作为一种发现未被测试覆盖的代码的手段。 代码覆盖率的意义 分析未覆盖部分...
DBA需要定期监控系统状态,通过调整参数、优化代码和架构设计来确保数据库的最佳运行状态,满足大量用户的需求,并预防可能出现的性能瓶颈。同时,持续学习和了解最新的Oracle技术及最佳实践,是保持数据库性能...
8. **代码重构** 随着项目的发展,定期审查和重构代码以优化结构和性能是必不可少的。保持代码的简洁和模块化,可以降低维护成本。 9. **使用版本控制** 使用版本控制系统(如Git)可以跟踪代码更改,方便协作,...
当代码的缩进层次超过3层时,应考虑重构代码,避免过度嵌套。 2. **大括号的放置** C语言中,大括号的风格有多种,但K&R(Knuth & Ritchie)风格被广泛推荐。它规定开始的大括号置于行末,结束的大括号置于新行...
应用程序优化主要包括SQL查询优化、事务处理逻辑优化和代码重构。优化SQL语句可以避免全表扫描,利用索引,减少I/O操作;优化事务处理可以减少锁定冲突,提高并发性能;代码重构则可以去除不必要的计算和资源消耗,...
骆 骥 -《由"汽车问题"浅谈深度搜索的一个方面——搜索对象与策略的重要性》 毛子青 -《动态规划算法的优化技巧》 俞 玮 -《基本动态规划问题的扩展》 张一飞 -《求N!的高精度算法》 ## 2002 戴德承 -《退...
- **软件工程原则**:学习软件工程的最佳实践,如设计模式、重构技术等。 - **软技能培养**:培养良好的沟通能力、团队合作精神等软技能。 #### 结语 学习Java是一项长期的过程,需要持之以恒的努力和不断实践的...
敏捷开发的设计实践还包括**重构**,在开发过程中不断改进代码结构,以保持代码的可维护性和扩展性。同时,**技术债务**的概念也是敏捷开发中的重要概念,它强调在快速交付的同时,不应忽视长期的技术积累和系统的可...
### 浅谈J2me游戏如何快速移植到Android 对于许多从事J2ME开发工作的人员而言,可能会突然间面临一个紧迫的需求:那就是将原本在J2ME平台上的游戏移植到Android平台上。乍一看,这似乎是一项庞大且复杂的工程,但...
例如,如果想要更改数据存储技术,由于代码紧密耦合,可能需要重构大量的代码。而采用三层结构,则可以将数据访问层更换为另一个数据库访问技术,而不需要修改中间业务层和表现层的代码,大大降低了维护的复杂性和...
### 浅谈Oracle数据库性能的优化 #### 一、引言 随着信息技术的快速发展和企业对数据处理需求的增加,数据库作为数据管理的核心组件,在企业的信息化建设中扮演着至关重要的角色。Oracle数据库作为全球最广泛使用...
通过学习和实践这些模式,开发者可以更好地理解和重构复杂系统,同时提高代码的可读性和可维护性。UML作为可视化工具,可以帮助团队成员更好地沟通和理解系统设计,从而促进协同开发。因此,无论是初学者还是经验...
3. **可扩展性**:随着业务需求的变化,可以通过增加新的业务层或者调整现有层来扩展系统功能,而无需大规模重构。 4. **复用性**:中间业务层的业务逻辑可以被多个表现层调用,降低了代码重复,提高了代码的复用性...
- **测试友好**:由于 mutation 是可预测且同步的,它们更容易被测试和重构。 2. commit 与 mutation: - commit 方法内部会调用 `_withCommit` 函数,设置 `_committing` 标志为 true,然后执行 mutation。这...