JAVA学习网首页 把生活查询网加入收藏 把JAVA学习网设为首页 联系方式
    Hi,JAVA学习
JAVA基础 设计模式 数据库 JavaBeans J2EE JavaDelphi 用户界面 综合文章  
像工匠一样进行重构--《Refactoring WorkBook》
时间:22/04/2007
作者:网络
来源:网络
小提示点这里把文章加入您的收藏夹,方便下次查看
设置文章字体大小:[ ]
像工匠一样进行重构, 让重构成为一门手艺.
Martin Flower的《Refactoring》其实更适合做一本关于重构的洗脑,宣言式的书,就像Kent Beck的《XP Explain》一样薄薄的就可以了。只可惜他却非常的厚。真正动手重构,我更喜欢《Refacoring WorkBook》,他以一个工匠的语气传授重构的手艺,,让重构从理论变为一门机械实在的手艺。

1.重构 Within Classes
1.1 大是罪
   Long Method,Large Class,Long Parameter List, 一般通过度量工具找出来,还可以自己设定一个触发器,当度量结果超过某个限度时就报警. PMD可以实现这个功能, 但软件度量工具我更喜欢Metrics Reload, 一个IDEA的插件, 给出的度量信息很全面.
   另外切忌为了度量的数字而重构。
   Long Method当然是尝试Extract Method.
   Large Class就要把类的职能分开几个域, 尝试拆出另一个Class或者SubClass
   Long Parameter List 可以通过在方法内的变量用查询获得而不用由参数传入;
                  或者把某些参数组成一个对象.
 
1.2 重复也是罪
    重复是30年前就被认为是不好的一样东西,表现在代码类似或者代码、接口不同而作用相近。
    去除重复的方法也没什么特别,无非就是
    Extract Method(同一个类)。有差异时,通过参数化达到共用。
    Pull Up Method到父类(同一个父类)。有差异时,通过模板机制达到共用。
    Class A调用Class B   或者   Extract Class C  (两个完全无相干的类)
 
1.3 命名
   中国程序员的英文本来就差, 要多参考Ofbiz,Comperie的命名, 尽快建立自己的项目字典,领域术语字典。
   也幸亏,在工具辅助下,代码rename是最容易的重构。
1.4复杂条件
   作者认为,即使现在Program最关注的是对象,以及对象间的关系了,但优质的内部代码依然重要,推荐《编程珠玑》和《Elements of Programing style》

   化简复杂条件的基本有三个方法
    1.通过!(A&B)==(!A)||(!B)化简
    2.通过有意义的变量,函数代替条件表达式,比如
       boolean isMidScore = (X>1000)&&(X<3000);
    3.通过把一个if拆分开来执行,把guard clause放在前面
      比如if(A||B)
                  do();
            ->if(A)
                  do();
               if(B)
                  do();
          又可以把2,3灵活组合,比如根据2,Extract出一个isRight()函数,根据3
    isRight()
    {
      if(A)
        return true;
      if(B)
        return true;
           return false;
        }
                            
1.5 其他
   死代码, 通过IDE工具探知并移除。小心有些框架代码是不能删除的。
   Magic Number,当然是改为常量。如果Magic Number很多,可以用Map枚举类来存放.
   除臭剂式的注释,为方法,变量改一个更适合的名字。如果注释是针对一个代码段的,可以Extract Method。当然,代码只能说明how, 不能说明why,更不能说明why not,这才是注释存在的地方。
 
2.重构 Between Classes
   待续

上一篇:Java与XML(二)用java编写xml的读写程序

下一篇:JSF - Request Processing Lifecycle

  • Imagemagick备忘
  • 对象和简单数据对象
  • 关于javabean的一些文档
  • 在 Java 应用程序中创建图像
  • JAVA与正则表达式(2年级之1)
  • 灵活地回滚事务
  • 使用JMS队列
  • SWT/JFace开发入门指南(七)
  • [学习笔记]Thinking in Java (the 2nd edition) Study Note (4)
  • Jasperreport 报表开发入门指南
  • 开发对象-关系数据库应用程序(第一部分)
  • EnterpriseJavaBeansDistilled(3)
  • 通过spring的拦截器实现Filter的功能
  • 在J2ME网络编程中使用CMWAP代理
  • Java语言入门--第五章Java的类
  • 对J2EE项目的一些体会
  • j2me开发书本推荐。
  • 全面研读EJB2.0(4)
  • 返回】 【顶部】 【关闭
    Copyright © 2005-2010 www.594k.com All Rights Reserved.
    版权所有:JAVA学习网 备案序号:皖ICP备06004238号