浅谈代码重构

标签: 代码重构
32人阅读 评论(0) 收藏 举报
分类:

一、代码重构

软件开发中,代码质量与其整洁度成正比,干净的代码,既在质量上可靠,也为后期维护、升级奠定了良好基础。

实际开发中,我们经常听到”重构”二字。重构既不修正错误,又不增加新的功能性。反而它是用于提高代码的可读性或者改变代码内部结构与设计,并且移除死代码,使其在将来更容易被维护。

关于重构说明,如下图所示:
这里写图片描述


二、常用的重构方法

1.封装成员变量(Encapsulate Field)

将仅限于本类使用的变量重写成私有(private)成员变量,并提供访问方法(accessor method)。这种重构方式可以将与外部调用者无关的变量隐藏起来,减少代码的耦合性,并减少意外出错的概率。

示例代码:

// 重构前
class SomeClass {
  public int memberA;
  ...
}

// 重构后
class SomeClass {
  private int memberA;
  public int getMemberA();
  public void setMemberA(int a);
  ...
}
2.提取方法(Extract Method)

将大段代码中的一部分提取后,构成一个新方法。这种重构可以使整段程序的结构变得更清晰,从而增加可读性。这也对函数(Function)通用。

示例代码:

// 重构前
void Process(MyDataSet mds) 
{   
 // Step 1 ... 
 int result = 0;  
 if (mds.isReady) 
 {  
  int data1 = mds.param[0]; 
  int data2 = mds.param[1];  
  // Preprocess... 
  result = data1 % data2;  
 } 
 // Step 2... 
}

// 重构后
void Process(MyDataSet mds)
{  
 // Step 1 ... 
 int result = 0;  
 if (mds.isReady) 
  result = CalculateMDS(mds.param[0], mds.param[1]);  
 // Step 2 ... 
}      

int CalculateMDS(int data1, int data2)  
{ 
  // Preprocess...  
  return data1 % data2; 
}
3.一般化类型(Generalize Type)

将多个类/函数共用的类型抽象出可以公用的基类(base class),然后利用多态性追加每个类/函数需要的特殊函数。这种重构可以让结构更加清晰,同时可以增加代码的可维护性。

示例代码:

// 重构前
class Rectangle {
  private:
    int w, h;
  public:
    double Area(){
        return w*h;
    }
}
class Triangle {
  private:
    int w, h;
  public:
    double Area(){
        return w*h/2;
    }
}

// 重构后
class Polygon {
  private:
    int w, h;
  public:
    virtual double Area() = 0;
}
class Rectangle : public Polygon {
  double Area(){
    return w*h;
  }
}
class Triangle : public Polygon {
  double Area(){
    return w*h/2;
  }
}
4.函数归父(Pull Up)

将方法从子类移动到父类。

5.函数归子(Push Down)

将方法从父类移动到子类。

6.方法更名(Rename Method)

方法从父类移动到子类。

示例代码:

// 重构前
public double f(double m, double a);

// 重构后
public double calculateForce(double mass, double acceleration);
查看评论

有想了解WAV文件格式的吗?看看我绘制的这幅图(重发)

 http://263.csdn.net/FileBBS/files/2001_9/T_548_1.zip           
  • sanjiang
  • sanjiang
  • 2001-09-06 19:25:00
  • 909

代码重构浅谈

1. 为什么要进行代码的重构     当今时代无论做哪能方面的事情,都离不开速度和效益这两个关键字,软件产品的开发也是如此。那么,在更短的开发周期内,如何才能推出功能更新质量更好的产品呢。如果新Mod...
  • Starstone_yzx
  • Starstone_yzx
  • 2008-09-01 11:45:00
  • 303

代码优化重构(很经典)

1、 清晰地表达意图 2、 一个方法只做一件事情 3、 同一个方法体内,保持相同的抽象层次 4、 不要重复自己(避免手动的复制与粘贴代码) 5、 减少“语法噪音” 6、 ...
  • dahaizhiliang
  • dahaizhiliang
  • 2014-04-21 18:25:13
  • 5725

代码重构(C# & ASP.NET版),中文完整扫描版

  • 2014年01月03日 17:34
  • 198.78MB
  • 下载

重构-改善既有代码的设计

  • 2017年09月30日 15:07
  • 29.6MB
  • 下载

程序员圣经(设计模式,代码重构)

  • 2010年09月06日 11:34
  • 8.74MB
  • 下载

代码重构的方法和意义

摘要:很多人认为重构浪费时间,影响项目进度,其实重构不仅可以让我们的代码更加强壮而且还可以加快我们的项目进度。就和我们盖一个高楼大厦一样,我们的架构和地基越好,我们的楼房会越坚固和牢靠。 一、什么是...
  • chen_gp_x
  • chen_gp_x
  • 2016-03-09 19:25:22
  • 15131

重构代码的一个例子

概述:重构无止境,重构你的代码,精雕细琢,千锤百炼。   我相信不少人都有这种感觉:某天闲暇下来回顾整理以前所写的代码,发现很多地方写得都不够好,代码中竟然存在着如此之多的“坏味道”。 ...
  • u012764241
  • u012764241
  • 2015-04-13 10:25:07
  • 719

代码重构之路

来到了新的公司已经半年之久了,准确来说应该是163天,整个应用无论是层级还是架构,都已经被我全部翻新了,这一路走过来,有艰辛,有郁闷,当然还有快乐和成就感。 在此总结一下这半年的工作。也算是有所收获...
  • u010479969
  • u010479969
  • 2016-07-28 15:21:31
  • 602

Android编写易于维护重构的界面代码(Fragment)

  • 2016年02月26日 20:44
  • 8.1MB
  • 下载
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 8507
    积分: 615
    排名: 8万+
    博客专栏