﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-潜心学习 技术强身-随笔分类-编程规范</title><link>http://www.blogjava.net/foolpig83/category/41118.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 31 Jul 2009 10:06:01 GMT</lastBuildDate><pubDate>Fri, 31 Jul 2009 10:06:01 GMT</pubDate><ttl>60</ttl><item><title>Java开发者需坚守的十大基本准则（转）</title><link>http://www.blogjava.net/foolpig83/archive/2009/07/31/289278.html</link><dc:creator>平涛</dc:creator><author>平涛</author><pubDate>Fri, 31 Jul 2009 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/foolpig83/archive/2009/07/31/289278.html</guid><wfw:comment>http://www.blogjava.net/foolpig83/comments/289278.html</wfw:comment><comments>http://www.blogjava.net/foolpig83/archive/2009/07/31/289278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/foolpig83/comments/commentRss/289278.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/foolpig83/services/trackbacks/289278.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有许多标准和实践准则可适用于Java开发者，但此处要说的，是每个Java开发者需坚守的基本原则。
<p>　　一、为代码加注释。虽然每个人都知道这点，但有时却不自觉忘了履行，今天你&#8220;忘了&#8221;加注释了吗？虽然注释对程序的功能没什么&#8220;贡献&#8221;，但过一段时间，比如说两星期之后或者更长，回过头来看看自己的代码，说不定已经记不住它是干什么的了。如果这些代码是你个人的，那还算是走运了，不幸的是，当然了，大多数时候都是别人的不幸，很多时候大家都是在为公司写代码，写代码的人也许早已经离开了公司，但别忘了一句古话，有来有往嘛，为他人，也为我们自己，请为你的代码加上注释。</p>
<p>　　二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的解决方案，比如说，在只有五个用户的程序中引入EJB、对程序实现了并不需要的框架（framework），之类的还有属性文件、面向对象解决方案、多线程等等。为什么要这样做呢？也许我们并不知道是否这样会更好，但这样做也许可以学到一些新东西，或者让自己更感兴趣一些。如果是不知道为什么这样做，建议多请教经验丰富的程序员，如果是为了个人的目的，麻烦让自己更专业一点。</p>
<p>　　三、始终牢记——&#8220;少即是好（Less is more）并不总是对的&#8221;。代码效率虽然很重要，但在许多解决方案中，编写更少的代码并不能改善这些代码的效率，请看下面这个简单的例子：</p>
<p>if(newStatusCode.equals("SD") &amp;&amp; (sellOffDate == null ||<br />
todayDate.compareTo(sellOffDate)＜0 || (lastUsedDate != null &amp;&amp;<br />
todayDate.compareTo(lastUsedDate)＞0)) ||<br />
(newStatusCode.equals("OBS") &amp;&amp; (OBSDate == null ||<br />
todayDate.compareTo(OBSDate)＜0))){<br />
newStatusCode = "NYP";&nbsp;<br />
}</p>
<p>　　能看明白if条件语句是干什么的吗？能想出来是谁写的这段代码吗？如果把它分成两段独立的if语句，是不是更容易理解呢，下面是修改后的代码：</p>
<p>if(newStatusCode.equals("SD") &amp;&amp; (sellOffDate == null ||<br />
todayDate.compareTo(sellOffDate)＜0 || (lastUsedDate != null &amp;&amp;<br />
todayDate.compareTo(lastUsedDate)＞0))){<br />
newStatusCode = "NYP";&nbsp;<br />
}else<br />
if(newStatusCode.equals("OBS") &amp;&amp; (OBSDate == null ||<br />
todayDate.compareTo(OBSDate)&lt;0))<br />
{<br />
newStatusCode = "NYP";&nbsp;<br />
}</p>
<p>　　是不是读起来容易多了呢，在此只是多加了一个if和两个花括号，但代码的可读性与可理解性就一下子提高了一大截。</p>
<p>　　四、请不要硬编码。开发者经常有意&#8220;忘记&#8221;或忽略掉这点，因为有些时候开发日程逼得实在太紧。其实，多写一行定义静态变量的代码能花多少时间呢？</p>
<p>public class A {<br />
public static final String S_CONSTANT_ABC = "ABC";&nbsp;<br />
public boolean methodA(String sParam1){<br />
if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){<br />
return true;&nbsp;<br />
}<br />
return false;&nbsp;<br />
}<br />
}</p>
&nbsp;
<p>　　现在，每次需要将&#8220;ABC&#8221;与其他变量进行比较时，不必记住实际代码，直接引用A.S_CONSTANT_ABC就行了，而且在今后需要进行修改时，也可在一处修改，不会翻遍整个源代码逐个修改了。</p>
<p>　　五、不要&#8220;创造&#8221;自己的框架（framework）。确切来说，有数以千计的各种框架存在，而且大多数是开源的，这些框架都是优秀的解决方案，可用于日常程序开发中，我们只需使用这些框架的最新版本就行了，至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是Struts了，这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢，还是省点力气吧，回头看看第二条——不要让事情复杂化。另外，如果正在开发的程序只有3个窗口，就不要使用Struts了，对这种程序来说，不需要那么多的&#8220;控制&#8221;。</p>
<p>　　六、不要使用println及字符串连接。通常为了调试方便，开发者喜欢在可能的所有地方都加上System.out.println，也许还会提醒自己回过头来再来删除，但有些时候，经常会忘了删除或者不愿意删除它们。既然使用System.out.println是为了测试，那么测试完之后，为什么还要留着它们呢，因为在删除时，很可能会删除掉真正有用的代码，所以不能低估System.out.println危害啊，请看下面的代码：</p>
<p>public class BadCode {<br />
public static void calculationWithPrint(){<br />
double someValue = 0D;&nbsp;<br />
for (int i = 0; i ＜10000; i++) {<br />
System.out.println(someValue = someValue + i);&nbsp;<br />
}<br />
}<br />
public static void calculationWithOutPrint(){<br />
double someValue = 0D;&nbsp;<br />
for (int i = 0; i ＜ 10000; i++) {<br />
someValue = someValue + i;&nbsp;<br />
}<br />
}<br />
public static void main(String [] n) {<br />
BadCode.calculationWithPrint();&nbsp;<br />
BadCode.calculationWithOutPrint();&nbsp;<br />
}<br />
}</p>
<p>　　从测试中可以发现，方法calculationWithOutPrint()执行用了0.001204秒，作为对比，方法calculationWithPrint()执行可是用了10.52秒。</p>
<p>　　要避免浪费CPU时间，最好的方法是引入像如下的包装方法：</p>
<p>public class BadCode {<br />
public static final int DEBUG_MODE = 1;&nbsp;<br />
public static final int PRODUCTION_MODE = 2;&nbsp;<br />
public static void calculationWithPrint(int logMode){<br />
double someValue = 0D;&nbsp;<br />
for (int i = 0; i ＜ 10000; i++) {<br />
someValue = someValue + i;&nbsp;<br />
myPrintMethod(logMode, someValue);&nbsp;<br />
}<br />
}<br />
public static void myPrintMethod(int logMode, double value) {<br />
if (logMode ＞ BadCode.DEBUG_MODE) { return; }<br />
System.out.println(value);&nbsp;<br />
}<br />
public static void main(String [] n) {<br />
BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);&nbsp;<br />
}<br />
}</p>
&nbsp;
<p>　　另外，字符串连接也是浪费CPU时间的一个大头，请看下面的示例代码：</p>
<p>public static void concatenateStrings(String startingString) {<br />
for (int i = 0; i ＜ 20; i++) {<br />
startingString = startingString + startingString;&nbsp;<br />
}<br />
}<br />
public static void concatenateStringsUsingStringBuffer(String startingString) {<br />
StringBuffer sb = new StringBuffer();&nbsp;<br />
sb.append(startingString);&nbsp;<br />
for (int i = 0; i ＜ 20; i++) {<br />
sb.append(sb.toString());&nbsp;<br />
}<br />
}</p>
<p>　　在测试中可发现，使用StringBuffer的方法只用了0.01秒执行完毕，而使用连接的方法则用了0.08秒，选择显而易见了。</p>
<p>　　七、多关注GUI（用户界面）。再三强调，GUI对商业客户来说，与程序的功能及效率同等重要，GUI是一个成功程序的最基本部分，而很多IT经理往往都没注意到GUI的重要性。在现实生活中，许多公司可能为了节省开支，没有雇用那些有着设计&#8220;用户友好&#8221;界面丰富经验的网页设计者，此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识，结果，很多开发出来的程序都是&#8220;计算机友好&#8221;甚于&#8220;用户友好&#8221;。很少有开发者同时精通软件开发及GUI设计，如果你在公司&#8220;不幸&#8221;被分配负责程序界面，就应该遵守下面三条原则：</p>
<p>　　1、 不要再发明一次轮子，即不做无用功。现有的程序可能会有类似的界面需求。<br />
　　2、 先创建一个原型。这是非常重要一步，用户一般想看到他们将使用的东西，而且可以先利用这个原型征求用户的意见，再慢慢修改成用户想要的样子。<br />
　　3、 学会换位思考。换句话来说，就是从用户的角度来审查程序的需求。举例来讲，一个汇总的窗口可以跨页或者不跨页，作为一个软件开发者，可能会倾向于不跨页，因为这样简单一些。但是，从用户的角度来看，可能不希望看到上百行数据都挤在同一页上。</p>
<p>　　八、文档需求不放松。每个商业需求都必须记录在案，这可能听上去像童话，似乎在现实生活中很难实现。而我们要做的是，不管开发时间多紧迫，不管最终期限多临近，对每个商业需求都必须记录在案。</p>
<p>　　 九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法，在此不便细说，只是强调，单元测试一定要完成，这也是编程中最基本的原则。当然了，如果有人帮你做单元测试自然是最好，如果没有，就自己来做吧，当创建一个单元测试计划时，请遵守以下三条最基本的原则：</p>
<p>　　1、 先于编写类代码之前编写单元测试。<br />
　　2、 记录单元测试中的代码注释。<br />
　　3、 测试所有执行关键功能的公有方法，这里不是指set和get方法，除非它们是以自己独特方式执行set和get方法。</p>
<p>　　十、质量，而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情，导致常常不能按时下班，但一般而言，公司不会因为雇员经常加班而对之表扬和奖励，公司只看重高质量的工作。如果遵守了前九条原则，你会发现自己写出的代码bug少且可维护性高，无形中质量提高了一大步。</p>
<img src ="http://www.blogjava.net/foolpig83/aggbug/289278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/foolpig83/" target="_blank">平涛</a> 2009-07-31 15:38 <a href="http://www.blogjava.net/foolpig83/archive/2009/07/31/289278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>