• Refactoring Code Complete reading notes


    重构--在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改
    原因:
    1、代码重复
    2、冗长的子程序
    3、循环过长或嵌套过深
    4、内聚性太差的类
    5、类的接口未能提供层次一致的抽象
    6、拥有太多参数的参数列表
    7、类的内部修改往往最局限于某部分
    8、变化导致对多个类的相同修改
    9、对继承体系的同样修改
    10、case语句需要做相同的修改
    11、同时使用的相关数据并未以类的方式进行组织
    12、成员函数使用其它类的特征比使用自身类的特征还要多
    13、过多使用基本数据类型
    14、某个类无所事事
    15、一系列传递流浪数据的子程序
    16、中间人对象无事可做
    17、某个类同其它类关系过于亲密
    18、子程序命命不恰当
    19、数据成员被设置为公用
    20、某个派生类仅使用基类的很少一部分成员函数
    21、注释被用于解释难懂的代码
    22、使用了全局变量
    23、在了程序调用前使用了设置代码,或在调用后使用了收尾代码
    24、程序中的代码似乎是在将来的某个时候才会用到

    数据级的重构:
    用具名常量代替神秘数值
    使变量名字更为清晰,传递更多的信息
    将表达式内联化
    用函数来代替表达式
    引入中间变量
    用多个单一用途变量代替某个多用途变量
    在局部用途中使用局部变量而不是参数
    将基础数据类型转化为类
    将一组类型码转化为类或枚举类型
    将一组类型码转换为一个基类及其相应派生类
    将数据转换为对象
    把群集封装起来
    用数据类来代替传统记录

    语句级重构:
    分解布尔表达式
    将得很要的布尔表达式转换成命名准确的布尔函数
    合并条件语句不同部分中的重复代码片段
    使用Break/return代替循环控件变量
    在嵌套的If-then-else语句中一旦知道答案就立即返回,而不是去赋一个返回值
    用多态来替代条件语句
    创建和使用null对象而不是去检测空值

    子程序级重构
    提取子程序或者方法
    将子程序的代码内联化
    将冗长的子程序转换成类
    用简单的算法代替复杂的算法
    增加参数
    删除参数
    将查询操作从修改操作中独立出来
    合并相似的子程序,通过参数区分它们的功能
    将行为取决于参数的子程序拆分开来
    传递整个对象而非特点成员
    传递特点成员而非整个对象
    包装向下转型的操作

    类实现的重构:
    将值对象转化为引用对象
    将引用对象转化为值对象
    用数据初始化替代虚函数
    改变成员函数或成员数据的位置
    将特殊代码提取为派生类
    将相似的代码结合起来放置在基类中

    类接口的重构:
    将成员函数放到另一个类中
    将一个类变成两个
    删除类
    去除委托关系
    去掉中间人
    用委托代替继承
    用继承代替委托
    引入外部的成员函数
    引入扩展类
    对暴露在外的成员变量进行封装
    对于不能修改的类成员,删除相关的Set成员函数
    隐藏那些不会在类之外被用到的成员函数
    封装不使用的成员函数
    合并那些实现非常类似的基类和派生类

    系统级重构:
    为无法控制的数据创建明确的索引源
    将单向的类联系改为双向的类联系
    将双向的类联系改为单向的类联系
    用Factory method模式而不是简单的构造函数
    用异常取代错误代码

  • 相关阅读:
    socket 第一课
    _getitem__ __setitem__ __delitem__ __len__
    单继承&多继承 注意点
    面对对象 类&对象
    异常检测
    模块导入
    序列化模块注意点 json&pickle
    re模块
    filter和map
    Maven入门
  • 原文地址:https://www.cnblogs.com/think/p/413529.html
Copyright © 2020-2023  润新知