`

重构36计(25-30)

阅读更多
第二十五计:函数体最多不超过100行
  记得以前看过一个函数有9000多行,很壮观啊,从那以后看到长函数时也不奇怪了,我认为过长函数的主要缺点是:
1、严重影响代码的阅读,使用到某个变量的地方可能间隔几百甚至上千行,如果if-else嵌套层次较多的话那就更噩梦了。
2、不利于代码的重用,短小而独立的逻辑处理单元更容易被重用,而过长的代码段则需要经过进一步分解才行。
我觉得函数最好不要超过100行,对于过长的函数要尽可能地进行分解,如果实在不能分解,那么就通过注释的方式增加该函数处理步骤的说明,例如:
public void foo(){

// 1、验证参数、内部状态的有效性
...
// 2、开始倾斜角度
...
// 2.1 计算角度1
...
// 2.2 计算角度2
...
// 3、输出计算说明书
...
}

第二十六计:使用语言的修饰符确保变量的不可变性
  当声明一个变量时,如果能十分确定该变量不会被修改或者不应该被修改,那最好把它声明为不可变的,如使用Java中的final、C++中的const修饰符,这样可以防止本该不变的变量被意外地修改。

第二十七计:对象状态共享
  大量对象的同时存在会占用系统宝贵的内存,如果这些对象中某些状态是相同的,那么可以将这些状态提取出来让所有需要它的对象共享,这可以大大减少冗余对象,从而达到节省内存的目的,设计模式中的Flyweight模式可以解决这个问题。

第二十八计:用对象代替普通常量
  由于普通常量本质上是一个简单的数字或者字符串,当我们错误地将某个类别的常量在另一个类别的常量的场景中使用时,就会产生问题,但是编译器并不会提示有错误,所以,这可能是一个不小的隐患,例如:
// 表示用户状态的常量声明
public static int USER_STATE_ACTIVE = 0;
public static int USER_STATE_DELETE = 1;

// 表示用户角色的常量声明
public static int USER_ROLE_NORMAL = 2;
public static int USER_ROLE_MANAGER = 3;

// 下面用户是否被激活的判断
if(userState == USER_ROLE_NORMAL){

}

这个判断本应该使用USER_STATE_ACTIVE和USER_STATE_DELETE两个常量之一,却意外地使用了其他常量,可能直到Bug产生后才能被发现。
可以使用对象常量来避免这种情况,例如:
public class State{
  private int state;
  public State(int s){
    state = s;
  }
}

// 表示用户状态的常量声明
public static State USER_STATE_ACTIVE = new State(0);
public static State USER_STATE_DELETE = new State(1);

public class Role{
  private int role;

  public Role(int r){
    role = r;
  }
}

// 表示用户角色的常量声明
public static Role USER_ROLE_NORMAL = new Role(2);
public static Role USER_ROLE_MANAGER = new Role(3);

下面的判断是无法通过编译的,因为userState是State类型的。
if(userState == USER_ROLE_NORMAL){

}

第二十九计:查询函数中尽量不要有修改操作
  我们一般都是根据函数的名字来判断它的功能,“表里不一“的函数可能会引起一些问题,例如我们调了一个查询函数(获取类的成员变量值的函数):getName(),但是它内部却修改了其他成员变量的值,当查找Bug的原因时,很可能会忽略这个函数,从它的名字看,觉得它不会引起问题,到最后发现就是它捣的鬼,心里估计会骂这个函数的作者:他奶奶的,代码如其人,表里不一!

第三十计:尽量封装对象的创建过程
  本文之前曾提到过要尽量为成员变量增加set和get函数,主要目的是为了掌握成员变量的控制权,对象的创建过程也是如此,如果提供者掌握了对象创建过程的控制权,那么就可以屏蔽具体的实现类,并且任意修改对象的创建过程。

ref:http://blog.csdn.net/m13666368773/article/details/7481505
分享到:
评论

相关推荐

    重构36计-其实很简单

    以上是重构的其中十计,重构的目的是提升代码质量,使其更易读、易维护。通过持续不断地进行重构,我们可以逐步优化代码,减少潜在的错误,同时提高开发效率。记住,重构并不总是意味着大规模的改动,有时候一个小的...

    代码重构36计(摘抄)

    【代码重构36计】是关于提升代码质量与可维护性的策略集合,主要针对C++编程语言。重构的核心目标是使程序更容易理解、更便于维护,并优化其结构。以下是其中的五项重构策略: 1. **参数列表对象化**: 当函数的...

    重构36计.docx

    重构是软件开发中的一种重要实践,旨在改善代码的结构,提高可读性和可维护性,同时保持原有功能。以下是对给定文档中提及的重构策略的详细解释: ### 参数列表对象化 当一个函数或方法的参数过多时,可以考虑创建...

    藏经阁-研发效能提升和敏捷实施36计.pdf

    "藏经阁-研发效能提升和敏捷实施36计.pdf" 本文档主要介绍了阿里巴巴的研发效能提升和敏捷实施36计,旨在提高研发效率和敏捷性。下面是本文档的知识点总结: 一、流动效率和研发效率提升 * 流动效率:响应能力、...

    提高PHP代码质量36计

    ### 提高PHP代码质量36计之精要 在软件工程领域,代码质量的重要性不言而喻,尤其对于广泛使用的编程语言PHP而言,提升代码质量不仅能够增强程序的稳定性、可维护性和安全性,还能显著提高开发效率。以下,我们将...

    提高php代码质量 36计 转载开源中国社区

    提高PHP代码质量的36计,是一份针对PHP开发者提升代码质量和编程效率的指南,尤其适合初学者和希望精进技能的中级开发者。本文将详细解读其中的几个关键点,帮助开发者理解并实践这些规范。 ### 1. 避免使用相对...

    java 三十六计

    重构,其实很简单,它的目的就是让程序变得更容易被理解,更具有可维护性,结构更合理

    TI_MotorControlCompendium_2010

    **25. 效率** - **定义:**衡量电机将输入能量转化为有用机械功的能力。 - **提高方法:**优化设计、使用高效材料等。 **26. 电子换向电机(ECM)** - **定义:**一种采用电子电路进行换向控制的电机。 - **优势:*...

    iphone3开发基础教程

    3.4 使用应用程序委托 30 3.5 编辑MainWindow.xib 33 3.6 编辑Button_FunViewController.xib 34 3.6.1 在Interface Builder中创建视图 34 3.6.2 连接所有元素 36 3.6.3 测试 39 3.7 小结 39 第4章 更丰富的用户界面...

Global site tag (gtag.js) - Google Analytics