论坛首页 Java企业应用论坛

关于代码重构的 读书笔记 (一)

浏览 3761 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-03-02   最后修改:2010-03-02

AgileJava 读书笔记 (一)
AgileJava是一本基于测试驱动开发的方法帮助你学会如何雕琢你的Java代码,从而得到稳定的面向对象设计和高可维护、高质量的系统。全书以一个学生管理系统为例子,一步一步教你如何设计你的系统,编写出高质量的代码,重构已有的代码等。
下面是我对本书学习的跟踪记录:
1 需要的软件
IDE或者程序编辑器
  IDE:Eclipse、Myeclipse、Borland Jbuilder、NetBeans等
  程序编辑器 记事本、TextPad、UltraEdit和SlickEdit等。
Java虚拟机
  Java 2 Sdk 版本 5.0
Junit
  您可以从Http://www.Junit.org上免费下载JUnit 就是将JUnit.zip文件内容解压缩到硬盘上本书使用的是Junit 3.8.1。
Ant
  Ant是一个基于XML的编译工具,Ant现在已经成为了编译和部署Java项目的标准。这个工具可能已经过时了。
2 编写测试类测试环境
第一章 起步
  软件开发是一个主要问题是代码维护的高成本:原因之一是匆忙行动或者纯粹疏忽导致的代码混乱。软件开发的主要任务是让软件可以工作,可以通过在编码之前先编写测试代码来应对这个挑战。其次,您的工作要确保代码是干净的。可以通过两种机制来实现
1. 保证在系统中没有重复的代码。
2. 保证代码是干净的,并且富有表现力,可以清晰地体现程序员的意图。
看一个测试代码
 

Public void testCreate(){
		Student student  = new Student(“Jane Doe”);
		String studentName = student.getName();
      assertEquals(“Jane Doe”,studentName);
      
      String secondStudent = new Student(“Joe Blow”);
      String secondStudentName = secondStudent.getName();
      assertEquals(“Joe Blow” ,secondStudentName);
      
      assertEquals(“Jane Doe”,studentName);

}
  第一步 要清除不必要的局部变量:studentName 和 secondStudentName 。它们丝毫无助于对方法的理解,它们可以被studentd对象的查询所替代,就像最后一个assertEquals。
   应该改写为: assertEquals(“Jane Doe”,student.getName());
  第二步 代码中到处嵌入字符串被视作不良的编程习惯。一个原因是,如果每个字符串所代表的意义不清晰地话,将很难理解这样的代码。在这个例子中,违背了不能有重复代码的准则。每个字符串(JaneDoe)都出现两次。而且这样的可能性意味着,改变了一个,没有改变另一个,从而代码中引入了缺陷。
   消除此冗余的方法使用字符串常量代替一个字符串。
  final String firstStudentName = “Jane Doe”;
这种开发流程是:
     1 编写一个小测试,来断言某些功能正确与否。
  2 运行测试,如果结果是失败。
  3 编写代码,使测试通过。
  4 重构测试和代码,消除重复的概念,确保代码富有表现力。
这样的循环,会很快成为一种根深蒂固、自然地开发流程。
其他注意地方:
  1 成员变量和参数使用相同的名字,但是在必要的地方用Java关键字this来调用成员变量。
  2 不要把成员变量直接暴露给其他对象。允许其他对象访问成员变量是一个坏注意

class Student {
			private String name;
          ……


    3     命名约定:采用驼峰模式命名规则,用名词来为成员变量命名,名字要能描述该成员变量被用作什么或者它表示什么,而不是如何实现。如firstName,trimer,description等。方法通常是动作或者查询:发送消息告诉对象做某件事情,或者您向对象请求获取某些信息。应该使用动词命名动作型方法。如:sell isDoorClosed等。取对象的属性方法一般的命名规则是getXxx这种形式,如取学生的姓名 getName方法。类名使用大写的驼峰模式,应该总用名词表示对象,对象是事物(实例)的抽象,不要使用复数名词作为类名。例如Student,LingList等。

 

   发表时间:2010-03-04  
呵呵,不错,希望楼主多写点。
0 请登录后投票
   发表时间:2010-03-04  
多谢,我会一章一章写的
0 请登录后投票
   发表时间:2010-03-04  
我看看了那本书 感觉是在测试 觉得很没意思....但一些大牛很推崇这本书
这是为什么呢
0 请登录后投票
   发表时间:2010-03-04  
好东西要多多,希望LZ继续写下去
0 请登录后投票
   发表时间:2010-03-04  
敏捷开发最重要的部分是TDD, 但我还没体会到其精髓, 一直没有养成开发功能前先写测试程序的习惯, 可能是工作环境所致, 也希望多了解写这方面的东西, 感谢LZ.
0 请登录后投票
   发表时间:2010-03-06   最后修改:2010-03-06
li445970924 写道
我看看了那本书 感觉是在测试 觉得很没意思....但一些大牛很推崇这本书
这是为什么呢

这本书主要不是讲技术的,而是将怎么写出优秀的代码,减少bug,教你如何优化自己的代码和重构你的代码,等你学到一定程度再看这本书就有意思了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics