什么是重构

       重构指在不改变程序原有行为的基础上,对代码进行修改,以改进其内部结构。是在代码写好之后,改进它的设计。

       对于小的程序,快速而随性的构建一个简单程序,没什么大不了的。但如果我们构建的代码是复杂系统的一部分,那么就需要评估下代码的好坏了。程序还是可以正常工作,编译器不管代码是美是丑。但是当我们要修改系统,修复bug或扩展功能的时候,问题就出现了。这需要人的参与,人是在乎这个的。丑陋的代码是很难被理解和修改的,由于很难被理解和修改,程序员就有可能犯错,引入bug

       设计模式是针对特定问题的解决方案。其目的是为兼容变化。设计模式有追求完美的渴望,有人指出,在设计前期使用模式常常导致设计过度。单纯对完美的追求,无法写出实用代码

       重构的过程中,由于每次修改的代码幅度都很小,所以很容易发现问题,不必花费大量时间调试。

      一个初级程序员都可以写出让计算机理解的代码,唯独写出让人理解代码的代码,才是优秀的程序员。

重构

第一步:构建测试环境

第二步:分解重组函数

   1. 提取逻辑语句,并提炼成单独函数。

   2. 找出函数局部变量和参数,可参考处理局部变量介绍的各种方法。任何不被修改的变量都可以被当做参数传递给函数。若只有一个变量被修改,则可以把它当做返回值。

 

      重构的目的是使软件更容易理解和修改。内部可以做很多修改,但必须对外部可观察行为不造成变化,或很小的变化。从某种角度来看,重构就是在整理代码,但其提供了一种高效且受控的代码整理技术。

     重构中会发生两种行为:添加新功能和重构改进程序结构。添加新功能不要修改既有代码,只管添加功能便是。重构时不能添加新功能,只管改进程序结构。软件开发过程中这两种行为经常交替变换。

     重构可以改进软件设计。没有重构,代码会逐渐腐败变质。重构则让所有的东西回到应处的位置之上,经常性的重构可以维护代码原有的形态。

     重构使软件更容易理解。在理解代码时,尝试去按自己的理解修改,使代码更趋简洁,随着而来的是看到一些以前看不到的设计层面的东西。加快开发进度,因此最快的开发方式就是重构。 

     重构不需专门拨出时间进行,应该在你添加功能时、修改bug时、复审代码时重构。

     计算机科学的很多问题,都可以通过添加一个间接层来实现。大多数重构都为程序引入更多的间接层,重构会将大型对象拆成多个小型对象,把大型函数拆分为小型函数。间接层是把双刃剑,会导致系统中对象数过多,难以管理。

     知道如何使用设计模式固然重要,但清楚何时不应该使用设计模式也是一种很重要的能力。不要为了设计模式而设计模式,这会导致设计过度。重构也一样。每当需要使用注释时,就需要将要注释的代码写进一个独立的函数中,并以其用途命名。

 

重构技巧

提炼函数

过长的函数很臃肿,承担过多责任。重构的第一步就是提炼函数。

将代码提炼到一个独立函数中,并让函数名解释该函数的用途。

好处:

1.       函数粒度变小,复用机会更大。

2.       上层函数读起来像是在读注释。

3.       细粒度的函数修改起来很容易。

函数名跟函数体之间的语义距离是衡量函数是否好坏的标准。

 

处理局部变量

Replace Temp With Query

若临时变量被用来保存某一表达式的结果,且只被赋值一次,将表达式封装成函数,临时变量的引入点替换为对函数的调用。

 

Inline Variable

将所有对该变量的引用,替换为对它赋值的表达式自身。该方法常作为Replace Temp with Query的一部分在使用。唯一单独使用的情形是将某函数的返回值赋予该临时变量。

Replace Temp with Query的区别在于R是将表达式封装成函数,而此时是直接嵌入表达式。

 

Split Temp Variable

若某个临时变量(不是循环变量,且不是用来收集计算结果)被赋值一次以上,在每次赋值时就需要使用Split Temp Variable分割成多个变量。

 

Introduce Explaining Variable

将复杂表达式的赋值给一个临时变量,以此变量来解释表达式的用途。临时变量可被Extract Method替代。可根据需要选择。

 

Remove Assignments to Parameters

当在函数中对参数进行修改时,使用临时变量取代参数,对临时变量进行修改。

OOD中为对象分配职责很重要,但这项工作很难在设计之初就做的很好,在这种情况下重构可以是我们修改原来的设计。

 

     类往往会因为承担太多责任而变得臃肿不堪,此时可以使用Extract class将一部分责任分离出去。如果类变得不负责任(职责模糊)可以使用Inline Class将其融入另一个类。如果一个类使用了另一个类Hide Delegate可以将此关系隐藏起来。隐藏委托类,常导致拥有者的接口经常发生变化,此时可以使用Remove Middle Man

 

<think>好的,用户想了解代码重构的概念和意义,我需要先明确代码重构的定义,然后解释其重要性。根据提供的引用,引用[1]提到代码重构涉及系统、模块、结构等的调整,使用设计原则和模式,改动大,影响广。引用[4]则强调了重构如何提升后续开发效率,减少bug。接下来需要整合这些信息,用简洁的中文回答,确保符合格式要求,比如行内公式用$...$,独立公式单独成段。同时要生成相关问题,检查引用标注是否自然。注意避免技术术语过于复杂,让用户容易理解。最后确认是否覆盖了所有引用内容,并正确标注来源。</think>### 代码重构的定义及重要性 #### 1. 代码重构的定义 代码重构是指在不改变软件外部功能的前提下,对代码结构、模块划分、类与类关系等进行优化调整的过程。其核心目标是**提升代码的可读性、可维护性和扩展性**,而非直接修复错误或添加新功能[^1]。重构涉及多种技术手段,例如分层设计、模块化解耦、抽象可复用组件等,通常需要遵循设计原则(如SOLID原则)和设计模式[^1][^4]。 #### 2. 代码重构的重要性 - **降低复杂性**:随着项目规模扩大,代码库可能变得臃肿混乱。重构通过消除重复代码(引用[2][^3])和优化结构,使代码更简洁易读。例如,将重复逻辑封装为函数或类,减少冗余[^2]。 - **提升开发效率**:未经重构的代码会导致添加新功能时效率下降,因为开发者需要花费大量时间理解原有逻辑(引用[4])。重构后,清晰的模块划分能让开发者专注于局部代码,减少调试时间。 - **减少潜在缺陷**:重构通过解耦和分层降低代码耦合度,使得修改代码时影响范围可控,从而减少引入新bug的风险。 - **支持长期维护**:良好的代码结构能降低后续维护成本。例如,抽象可复用组件后,业务逻辑与底层实现分离,修改底层时无需重写大量代码。 #### 3. 重构的典型场景 - **大型系统重构**:对顶层设计的调整,如系统分层、模块边界划分(引用[1])。 - **消除重复代码**:将重复片段提取为公共函数或工具类(引用[2])。 - **功能扩展前准备**:在添加新功能前,通过重构使现有代码适应新需求(引用[4])。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值