首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

(转)Java开发者的十大戒条

2012-10-07 
(转)Java开发者的十大戒律 有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守

(转)Java开发者的十大戒律

 有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。Java代码?
  1. if(newStatusCode.equals("SD")?&&?(sellOffDate?==?null?||???
  2. ????????todayDate.compareTo(sellOffDate)<0?||?(lastUsedDate?!=?null?&&???
  3. ????????todayDate.compareTo(lastUsedDate)>0))?||???
  4. ????????(newStatusCode.equals("OBS")?&&?(OBSDate?==?null?||???
  5. ????????todayDate.compareTo(OBSDate)<0))){???
  6. ????????newStatusCode?=?"NYP";???
  7. ????}??

?  能看明白if条件语句是干什么的吗?能想出来是谁写的这段代码吗?如果把它分成两段独立的if语句,是不是更容易理解呢,下面是修改后的代码:

Java代码?
  1. if(newStatusCode.equals("SD")?&&?(sellOffDate?==?null?||???
  2. ????todayDate.compareTo(sellOffDate)<0?||?(lastUsedDate?!=?null?&&???
  3. ????todayDate.compareTo(lastUsedDate)>0))){???
  4. ????????newStatusCode?=?"NYP";???
  5. }??
  6. else?if(newStatusCode.equals("OBS")?&&?(OBSDate?==?null?||???
  7. ????????todayDate.compareTo(OBSDate)<0))?{???
  8. ????newStatusCode?=?"NYP";???
  9. }??

?  是不是读起来容易多了呢,在此只是多加了一个if和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。

  四、请不要硬编码。开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢?

Java代码?
  1. public?class?A?{???
  2.   public?static?final?String?S_CONSTANT_ABC?=?"ABC";???
  3.   public?boolean?methodA(String?sParam1){???
  4.   ????if?(A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){???
  5.   ?????????return?true;???
  6.   ????}???
  7.   ????return?false;???
  8.   }???
  9. }??

?  现在,每次需要将“ABC”与其他变量进行比较时,不必记住实际代码,直接引用A.S_CONSTANT_ABC就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。

  五、不要“创造”自己的框架(framework)。确切来说,有数以千计的各种框架存在,而且大多数是开源的,这些框架都是优秀的解决方案,可用于日常程序开发中,我们只需使用这些框架的最新版本就行了,至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是Struts了,这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢,还是省点力气吧,回头看看第二条——不要让事情复杂化。另外,如果正在开发的程序只有3个窗口,就不要使用Struts了,对这种程序来说,不需要那么多的“控制”。

  六、不要使用println及字符串连接。通常为了调试方便,开发者喜欢在可能的所有地方都加上 System.out.println,也许还会提醒自己回过头来再来删除,但有些时候,经常会忘了删除或者不愿意删除它们。既然使用 System.out.println是为了测试,那么测试完之后,为什么还要留着它们呢,因为在删除时,很可能会删除掉真正有用的代码,所以不能低估 System.out.println危害啊,请看下面的代码:

?

Java代码?
  1. public?class?BadCode?{???
  2. ????public?static?void?calculationWithPrint(){???
  3. ????????double?someValue?=?0D;???
  4. ????????for?(int?i?=?0;?i?<?10000;?i++)?{???
  5. ????????????System.out.println(someValue?=?someValue?+?i);???
  6. ????  }???
  7. ????}???
  8. ????public?static?void?calculationWithOutPrint(){???
  9. ????????double?someValue?=?0D;???
  10. ????????for?(int?i?=?0;?i?<?10000;?i++)?{???
  11. ????????????someValue?=?someValue?+?i;???
  12. ????  }???
  13. ????}???
  14. ????public?static?void?main(String?[]?n)?{???
  15. ????????BadCode.calculationWithPrint();???
  16. ????????BadCode.calculationWithOutPrint();???
  17. ????}???
  18. }??

?

  从测试中可以发现,方法calculationWithOutPrint()执行用了0.001204秒,作为对比,方法calculationWithPrint()执行可是用了10.52秒。

  要避免浪费CPU时间,最好的方法是引入像如下的包装方法:

?

Java代码?
  1. public?class?BadCode?{??
  2. ????public?static?final?int?DEBUG_MODE?=?1;??
  3. ????public?static?final?int?PRODUCTION_MODE?=?2;??
  4. ??
  5. ????public?static?void?calculationWithPrint(int?logMode){???
  6. ????????double?someValue?=?0D;???
  7. ????????for?(int?i?=?0;?i?<?10000;?i++)?{???
  8. ????????????someValue?=?someValue?+?i;???
  9. ????????????myPrintMethod(logMode,?someValue);???
  10. ????  }??
  11.   }?public?static?void?myPrintMethod(int?logMode,?double?value)?{???
  12. ????if?(logMode?>?BadCode.DEBUG_MODE)?{?return;?}???
  13. ????????System.out.println(value);???
  14.   }?public?static?void?main(String?[]?n)?{???
  15. ????????BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);???
  16.   }??
  17. }??

?

  另外,字符串连接也是浪费CPU时间的一个大头,请看下面的示例代码:

Java代码?
  1. public?static?void?concatenateStrings(String?startingString)?{???
  2. ????for?(int?i?=?0;?i?<?20;?i++)?{???
  3. ????????startingString?=?startingString?+?startingString;???
  4. ????}???
  5. }???
  6. ??
  7. public?static?void?concatenateStringsUsingStringBuffer(String?startingString)?{???
  8. ????StringBuffer?sb?=?new?StringBuffer();???
  9. ????sb.append(startingString);???
  10. ????for?(int?i?=?0;?i?<?20;?i++)?{???
  11. ????????sb.append(sb.toString());???
  12. ????}???
  13. }??

?

?

  在测试中可发现,使用StringBuffer的方法只用了0.01秒执行完毕,而使用连接的方法则用了0.08秒,选择显而易见了。

  七、多关注GUI(用户界面)。再三强调,GUI对商业客户来说,与程序的功能及效率同等重要,GUI是一个成功程序的最基本部分,而很多IT经理往往都没注意到GUI的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识,结果,很多开发出来的程序都是“计算机友好”甚于“用户友好”。很少有开发者同时精通软件开发及GUI设计,如果你在公司“不幸”被分配负责程序界面,就应该遵守下面三条原则:

  1、 不要再发明一次轮子,即不做无用功。现有的程序可能会有类似的界面需求。

  2、 先创建一个原型。这是非常重要一步,用户一般想看到他们将使用的东西,而且可以先利用这个原型征求用户的意见,再慢慢修改成用户想要的样子。

  3、 学会换位思考。换句话来说,就是从用户的角度来审查程序的需求。举例来讲,一个汇总的窗口可以跨页或者不跨页,作为一个软件开发者,可能会倾向于不跨页,因为这样简单一些。但是,从用户的角度来看,可能不希望看到上百行数据都挤在同一页上。

  八、文档需求不放松。每个商业需求都必须记录在案,这可能听上去像童话,似乎在现实生活中很难实现。而我们要做的是,不管开发时间多紧迫,不管最终期限多临近,对每个商业需求都必须记录在案。

  九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试一定要完成,这也是编程中最基本的原则。当然了,如果有人帮你做单元测试自然是最好,如果没有,就自己来做吧,当创建一个单元测试计划时,请遵守以下三条最基本的原则:

  1、 先于编写类代码之前编写单元测试。

  2、 记录单元测试中的代码注释。

  3、 测试所有执行关键功能的公有方法,这里不是指set和get方法,除非它们是以自己独特方式执行set和get方法。

  十、质量,而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情,导致常常不能按时下班,但一般而言,公司不会因为雇员经常加班而对之表扬和奖励,公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug少且可维护性高,无形中质量提高了一大步。

原文章作者 ?出处http://justjavac.iteye.com/blog/685574

?

热点排行