资讯专栏INFORMATION COLUMN

重构-改善既有代码的设计(五)--重构列表

davidac / 2338人阅读

摘要:什么是重构列表重构方法需要以一种特定的格式记录下来。这些重构手法到底有多成熟本书中提到的重构手法第章。做法创造新函数,以用途命名提炼代码到函数中检查变量名是否符合规范在源函数中,将被提炼代码替换为函数引用测试范例重构前重构后

什么是重构列表

重构方法需要以一种特定的格式记录下来。按照格式记录下来的重构方法的集合叫重构列表

重构的记录格式

每个重构手法可分为5个部分:

名称

构建重构词汇列表,名称当然是很关键的了,要充分的表达出重构的核心关键;

概要

介绍重构手法的功能,以及应用场景;便于我们查找重构手法;包括三个部分:

一句话介绍重构能解决的问题

一段简短陈述,介绍你应该做的事

一副速写图,简单展现重构前后示例,可以是一段代码或UML图

动机

介绍为什么要用以及什么情况下要用这种重构手法;

做法

简明扼要的介绍怎么一步步实现这种手法;

A.做法出自我的笔记,这些笔记是为了我在一段时间不做重构后还记得怎么做。如果清楚知道该使用哪个重构,但不知道具体步骤可以查看做法;但如果是初次使用的话,还 要结合范例。

范例

以一个简单的例子说明如何实现这种手法;

寻找引用点

很多重构需要找到一个字段,一个方法,一个类的所有引用点。使用文本查询工具.比如idea的文本查询和代码预编译。

这些重构手法到底有多成熟

本书中提到的重构手法(第3章)。都是作者试过的。但是不能一本不变。依具体情况具体使用

demo

名称:提炼函数
概要:你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立函数,并让函数名称解释该函数的用途。

void printOwing() {   
    //print banner  
    System.out.println(“*********”);  
    System.out.println(“Banner”);  
    System.out.println(“*********”);  
    //print details  
    System.out.println ("name: " + _name);   
        System.out.println ("amount " + getOutstanding());   
}   

重构后
void printOwing()  {  
    printBanner();   
    printDetails(getOutstanding());   
} 
Void printBanner()  {  
    //print banner  
    System.out.println(“*********”);  
    System.out.println(“Banner”);  
    System.out.println(“*********”);  
}  
void printDetails (double outstanding)   {   
    System.out.println ("name: " + _name);   
    System.out.println ("amount " + outstanding);   
}
动机

过长的函数或者一段需要注释才能让人理解用途的代码,就应该将这段代码放进一个独立函数中。简短而命名良好的函数的好处:
1)如果每个函数的粒度都很小,那么函数被复用的机会就更大;
2)这会使高层函数读起来就想一系列注释;
3)如果函数都是细粒度,那么函数的覆写也会更容易些。

做法

创造新函数,以用途命名

提炼代码到函数中

检查变量名是否符合规范

在源函数中,将被提炼代码替换为函数引用

测试

范例
 重构前
 void printOwing() {   
        //print banner  
        System.out.println(“*********”);  
        System.out.println(“Banner”);  
        System.out.println(“*********”);  
        //print details  
        System.out.println ("name: " + _name);   
            System.out.println ("amount " + getOutstanding());   
    }   

重构后
void printOwing()  {  
    printBanner();   
    printDetails(getOutstanding());   
} 
Void printBanner()  {  
    //print banner  
    System.out.println(“*********”);  
    System.out.println(“Banner”);  
    System.out.println(“*********”);  
}  
void printDetails (double outstanding)   {   
    System.out.println ("name: " + _name);   
    System.out.println ("amount " + outstanding);   
}

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

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

相关文章

  • 重构-改善既有代码设计》读书笔记-重构

    摘要:重构改善既有代码设计动词使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。修补错误时重构代码时重构怎么重构关于代码的重构技巧参考重构改善既有代码设计读书笔记代码篇个人博客 重构定义 名词 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。——《重构-改善既有代码设计》 动词 使用一系列重构手法,在不改变软件可观察行为的前提下,...

    ermaoL 评论0 收藏0
  • 读书笔记《重构 改善既有代码设计

    摘要:重构在不改变代码的外在的行为的前提下对代码进行修改最大限度的减少错误的几率本质上,就是代码写好之后修改它的设计。重构可以深入理解代码并且帮助找到。同时重构可以减少引入的机率,方便日后扩展。平行继承目的在于消除类之间的重复代码。 重构 (refactoring) 在不改变代码的外在的行为的前提下 对代码进行修改最大限度的减少错误的几率 本质上, 就是代码写好之后 修改它的设计。 1,书中...

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

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

    myshell 评论0 收藏0
  • 重构-改善既有代码设计(一)--重构,第一个案例

    摘要:并根据目录选读第章重构,第一个案例这是只是一个方法。绝大多数情况下,函数应该放在它所使用的数据的所属对象内最好不要在另一个对象的属性基础上运用语句。 什么是重构 在不改变代码外在行为的前提下,对代码做出修改以改进程序内部的结构简单地说就是在代码写好后改进它的设计 谁该阅读这本书 专业程序员(能够提高你的代码质量) 资深设计师和架构规划师(理解为什么需要重构,哪里需要重构) 阅读技巧...

    acrazing 评论0 收藏0
  • 重构---改善既有代码设计》之简化条件表达式

    那有什么天生如此,只是我们天天坚持。 本篇文章主要讲解 《重构---改善既有代码的设计》 这本书中的 第九章简化条件表达式中 的知识点, Decompose Conditional(分解条件表达式) 问题:你有一个复杂的条件(if、then、else) 语句 解决:从if、then、else三个段落中分别提炼出独立函数 //重构前 if (date.before(SUMMER_START) |...

    Cheng_Gang 评论0 收藏0

发表评论

0条评论

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