美文网首页程序员IT共论编程学习
重构读书笔记——代码的坏味道

重构读书笔记——代码的坏味道

作者: chiguozi | 来源:发表于2016-06-22 01:28 被阅读376次

    Duplicated Code(重复代码)

    常见问题

    • 同一个类的两个函数含有相同的表达式
    • 两个互为兄弟的子类内含相同的表达式
    • 两个毫不相关的类有相同或相似的代码

    常用的重构方法:

    • Extract Method 提炼方法
    • Pull Up Method 字段上移
    • Extract Class 提炼类

    Long Method (过长函数)

    常见问题

    • 在开发维护过程中,函数越来越长,逻辑越来越复杂,难以理解

    常用的重构方法:

    • Extract Method 提炼方法
    • Decompose Conditional 分解表达式

    注:函数并不是越短越好,一个函数尽量只完成一个功能。

    Large Class(过大的类)

    常见问题

    • 单个类功能太多
    • 有大量的实例变量,和重复代码

    常用的重构方法:

    • Extract Class 提炼类
    • Extract Subclass 提炼子类
    • Extract Interface 提炼接口

    Long Parameter List (过长参数列表)

    常见问题

    • 函数功能越来越大
    • 不停添加各种特殊操作

    常用的重构方法:

    • Replace Parameter With Method 以函数对象取代函数
    • Preserve Whole Object 保持对象完整
    • Introduce Parameter Object 引入参数对象

    DivergentChange (发散式变化)

    常见问题

    • 某个类因为不同原因在不同方向上发生变化,如修改某个功能,需要同时修改某几个函数

    常用重构方法

    • Extract Class 提炼类

    Shotgun Surgery (散弹式修改)

    常见问题

    • 一种变化引起多个类修改

    常用重构方法

    • Move Method 移动方法
    • Move Field 移动字段
    • Inline Class 内部类

    Feature Envy (依恋情结)

    常见问题

    • 类函数对某个类的以来程度远大于当前类

    常用重构方法

    • Extract Method 提炼方法
    • Move Method 移动方法

    Data Clumps(数据泥团)

    常见问题

    • 数据结构设计混乱,多个类中的某些字段总是同时出现

    常用重构方法

    • Extract Class 提炼类
    • Preserve Whole Object 保持对象完整
    • Introduce Parameter Object 引入参数对象

    Primitive Obsession(基本类型偏执)

    常见问题

    • 大量使用基本类型
    • 未对数据进行有效的抽象
    • 未对总是同时出现的字段封装

    常用重构方法

    • Replace Type Code with Class
    • Extract Class

    Switch Statements

    常见问题

    • 面向对象程序应该少用Switch(或Case)
    • Switch散布在多个地方,修改会影响多个类

    常用重构方法

    • Replace Conditional with Polymorphism
    • Replace Parameter with Explicit Methods

    Parallel Inheritance Hierarchies(平行继承体系)

    常见问题

    • 为某个类添加子类时,必须为另一个类相应的增加一个子类

    常用重构方法

    • Move Method
    • Move Field

    Lazy Class(冗赘类)

    常见问题

    • 类和函数含有冗余操作

    常用重构方法

    • Collapse Hierarchy
    • Inline Class

    Speculative Generality(夸夸其谈未来性)

    常见问题

    • 过分强调扩展性,使用代码难以理解
    • 添加许多多余的参数

    常用重构方法

    • Collapse Hierarchy
    • Remove Parameter

    Temporary Field (令人迷惑的临时字段)

    常见问题

    • 类中某些字段,只有在及其特殊的条件下才会使用

    常用重构方法

    • Extract Class

    Message Chains(过度耦合的消息链)

    常见问题

    • 多个类之间依赖大,a.x().y().z()....
    • 产生多个临时变量

    常用重构方法

    • Hide Delegate

    Middle Man

    常见问题

    • 过度使用委托,某个类的大部分功能都在委托给其他类

    常用重构方法

    • Remove Middle Man
    • Inline Method
    • Replace Delegation With Inheritance

    Inappropriate Intimacy (狎昵关系)

    常见问题

    • 两个类互相依赖度极高,类的内部实现影响彼此

    常用重构方法

    • Move Method
    • Move Field
    • Replace Inheritance Delegation

    Alternative Class with Different Interfaces(异曲同工类)

    常见问题

    • 两个类 、函数做着实现相同的功能

    常用重构方法

    • Extract Superclass
    • Move Method

    Incomplete Library Class(不完美的库类)

    常见问题

    • 引用的库设计不完善
    • 有许多特殊操作

    常用重构方法

    • Introduce Foreign Method
    • Introduce Local Extensions

    Data Class (纯稚数据类)

    常见问题

    • 只包含数据和getter setter
    • 内部字段的 处理分散在各个类中

    常用重构方法

    • Encapsulate Field
    • Encapsulate Collection
    • Remove Setting Method

    Refused Bequest(被拒绝的馈赠)

    常见问题

    • 子类继承过多不需要功能

    常用重构方法

    • Push Down Method
    • Push Down Field

    Comments(过多的注释)

    当你感觉需要撰写注释时,请先尝试重构,试着让所有注释变得多余

    相关文章

      网友评论

        本文标题:重构读书笔记——代码的坏味道

        本文链接:https://www.haomeiwen.com/subject/bvxgdttx.html