资讯专栏INFORMATION COLUMN

如何重构

iamyoung001 / 1671人阅读

摘要:重构定义重构是对软件内部结构的调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。重构节奏小步前进,频繁测试。

1.重构定义:

重构是对软件内部结构的调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

2.重构节奏:

小步前进,频繁测试。

3.重构意义: 1.改进软件设计 2.使软件更容易被理解 3.帮助找到bug 4.提高编程速度

恶劣的设计会让你的速度慢下来,你会把时间花在调试上面,无法添加新功能,修改时间越来越长,因为你必须花更多时间来理解系统,寻找重复代码。

5.获得更高层次的认识 4.何时重构 1.重复代码 2.过长函数

有注释的地方一般需要重构

3.过大的类 4.过多的switch或者if else

switch或者if else过多会导致有任何修改都需要修改switch,而且枚举如果在多个地方使用就会涉及多个地方修改

5.重构的技巧 1.Extract Method:提炼函数 1.1.重构场景:

方法过长,代码中注释过多

1.2.做法

创建一个新函数,根据它的意图来命名(以【做什么】而不是【怎么做】来命名)。

2.Inline Temp:内联临时变量 2.1.重构场景

一个内联变量被简单的表达式赋值一次

2.2.做法

取消赋值动作,直接替换为对它赋值的表达式本身

2.3.举例
 double basePrice = getBasePrice();
 return basePrice;

应该改为

return getBasePrice();
3.Replace Temp with Query 以查询取代临时变量 3.1.重构场景

以临时变量保存某一表达式结果,临时变量的问题在于,它们是临时性的,而且只能在所属的函数内访问,所以它会驱使你写出更长的函数,只有这样你才能访问到那些临时变量。如果把临时变量替换为一个查询,那么同一个类中的所有函数都可以访问这个临时变量。

3.2.做法

将临时变量使替换为新函数引用

3.3.举例

重构前

public class Base {
    private int quantity;
    private int itemPrice;
  
    public double getTotalPrice() {
        double basePrice = quantity * itemPrice;
        if(basePrice < 1000) {
            return basePrice * 0.95;
        } else {
            return basePrice * 0.98;
        }
    }
}

第一次:重构后

取消临时变量->变成函数引用

public class Base {
    private int quantity;
    private int itemPrice;
  
    public double getTotalPrice() {
        if(basePrice() < 1000) {
            return basePrice() * 0.95;
        } else {
            return basePrice() * 0.98;
        }
    }

    public double basePrice() {
        return quantity * itemPrice;
    }
}

再次重构:

获取结果方法从打折和总额耦合->把打折逻辑独立出去

public class Base {
    private int quantity;
    private int itemPrice;
    
    public double getTotalPrice() {
        return basePrice() * discountFactor();
    }

    public double basePrice() {
        return quantity * itemPrice;
    }

    public double discountFactor() {
        if(basePrice() > 1000) {
            return 0.95;
        } else {
            return 0.98;
        }
    }
}
4.Introduce Explaining Variable:引入解释变量

对于复杂查询通过引入解释变量来降低复杂性。

怎么区分使用 Extract Method 还是 Introduce Explaining Variable呢?

在一个方法里面临时变量很多,使用Extract Method变得很困难的时候使用它。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76215.html

相关文章

  • 如何用微服务重构应用程序

    摘要:以下两个要点将会对任何微服务重构策略产生重大影响。批量替换通过批发更换,您可以一次性重构整个应用程序,直接从单体式转移到一组微服务器。如果您通过使用破解您的微服务器,那么每个域将围绕一个用例,或者更常见的,一组相互关联的用例。 在决定使用微服务之后,为了将微服务付诸实践,也许你已经开始重构你的应用程序或把重构工作列入了待办事项清单。 无论是哪种情况,如果这是你第一次重构应用程序,那么您...

    KevinYan 评论0 收藏0
  • 重构:一项常常被忽略的基本功

    摘要:无论如何,单元测试一直是一中非常重要却常常被忽视的技能。在实践中,重构的要求是很高的它需要有足够详尽的单元测试,需要有持续集成的环境,需要随时随地在小步伐地永远让代码处于可工作状态下去进行改善。 showImg(https://segmentfault.com/img/bVbttWF?w=1000&h=528); 五月初的时候朋友和我说《重构》出第 2 版了,我才兴冲冲地下单,花了一个...

    idealcn 评论0 收藏0
  • 如何编写高质量代码

    摘要:如果你不能以高标准来要求自己,即使你看再多的如何写出高质量代码,懂再多的代码规范,也是没有用,最终还是会写出低质量代码。建议先从代码规范开始,熟悉代码规范,遵循规范写代码,直到成为习惯,然后再学习其它方法,最终写出高质量代码。 更多文章 什么是高质量代码? 高质量代码具有以下几个特点: 可读性高 结构清晰 可扩展(方便维护) 代码风格统一 低复杂性 简练 编写高质量代码主要遵循以下...

    only_do 评论0 收藏0
  • 重构-改善既有代码的设计(二) --重构原则

    摘要:改进代码设计的一个重要原则就是消除重复代码使软件更容易被理解优秀的代码能够让接收你代码的付出更少的学习成本。重构更容易找到重构能加深对代码的理解。可以重构的情况添加功能时可以重构。说明你没有发现代码的错误。需要重构复审代码时可以重构。 为何重构 重构不是银弹,但是帮助你达到以下几个目的 改进软件设计 不良的程序需要更多的代码。而代码越多,正确的修改就越困难。改进代码设计的一个重要原则就...

    myshell 评论0 收藏0
  • 如何重构“箭头型”代码

    摘要:写代码时,代码的运行中的控制状态或业务状态是会让你的代码流程变得混乱的一个重要原因,重构箭头型代码的一个很重要的工作就是重新梳理和描述这些状态的变迁关系。重构箭头型代码其实是在帮你重新梳理所有的代码和逻辑,这个过程非常值得为之付出。 所谓箭头型代码,基本上来说就是下面这个图片所示的情况。 showImg(https://segmentfault.com/img/bVbfhps?w=72...

    cloud 评论0 收藏0

发表评论

0条评论

iamyoung001

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<