用户操作
[即时聊天] [发私信] [加为好友]
ericID:etoaoo
19625次访问,排名6404,好友0人,关注者1人。
etoaoo的文章
原创 35 篇
翻译 0 篇
转载 16 篇
评论 10 篇
eric的公告
苟有恒,何必三更眠五更起;最无益,莫过一十日寒。 --自勉之
最近评论
linda003:总结ing
d8111:总结的很好,呵呵。总有一些新人喜欢sysout 一堆调试信息,批评他们,他们倒是据理力争“我只是测试而已,等下删”
老鼠:好可爱的大象啊
fu囡:三月注定是奋斗的季节,期待你生命中的彩虹出现的 那一刻.
etoaoo:试一下
文章分类
收藏
相册
南大
C++
alai04
AVMM
C++的罗浮宫
DbaNotes
fatalerror99 's BLog
GreenCode's Blog
limodou的学习记录
曾登高
流浪歌手的行李
Java
你是我永远的乡愁
Others
云风的blog
余秋雨
徐静蕾
思归
方文山
李维
花钱的年华
车东
透明思考
其它
goflyfreely
hdhhb
ZhangYv的专栏
紫痕空间
收藏的blog
Donald E. Knuth
Alexander A. Stepanov
Bjarne Stroustrup
Bruce Eckel
Charles Petzold
Chris Sells
Daivd R. Musser
Dennis M. Ritchie
Herb Sutter
James Gosling
Nicolai M. Josuttis
Scott Meyers
Stanley Lippman
侯捷
荣耀
我的朋友
有意思的blog
Outmyth
Signum sine tinnitu--by Guy Kawasaki
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

转载 Java开发者需坚守的十大基本准则收藏

新一篇: 基于Ajax的应用程序架构汇总 | 旧一篇: MYSQL Like查询不区分大小写

有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。
&A7{Ck B8X0
;J'{aaGPi"f-P x0  一、为代码加注释。虽然每个人都知道这点,但有时却不自觉忘了履行,今天你“忘了”加注释了吗?虽然注释对程序的功能没什么“贡献”,但过一段时间,比如说两星期之后或者更长,回过头来看看自己的代码,说不定已经记不住它是干什么的了。如果这些代码是你个人的,那还算是走运了,不幸的是,当然了,大多数时候都是别人的不幸,很多时候大家都是在为公司写代码,写代码的人也许早已经离开了公司,但别忘了一句古话,有来有往嘛,为他人,也为我们自己,请为你的代码加上注释。中文JAVA技术网F7Kh9C#OyhS6g

D,fX]m$K(KQ;[4Q0  二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的解决方案,比如说,在只有五个用户的程序中引入EJB、对程序实现了并不需要的框架(framework),之类的还有属性文件、面向对象解决方案、多线程等等。为什么要这样做呢?也许我们并不知道是否这样会更好,但这样做也许可以学到一些新东西,或者让自己更感兴趣一些。如果是不知道为什么这样做,建议多请教经验丰富的程序员,如果是为了个人的目的,麻烦让自己更专业一点。
3Sp2q$ht0
D4wb6LN Nn[)Ju9n0  三、始终牢记——“少即是好(Less is more)并不总是对的”。代码效率虽然很重要,但在许多解决方案中,编写更少的代码并不能改善这些代码的效率,请看下面这个简单的例子:中文JAVA技术网 C0R,B P!I4y
中文JAVA技术网;M6J9PBXjEvu
if(newStatusCode.equals("SD") && (sellOffDate == null ||todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&todayDate.compareTo(lastUsedDate)>0)) ||(newStatusCode.equals("OBS") && (OBSDate == null ||todayDate.compareTo(OBSDate)<0))){
L!p3E/_4R#w(r'@p0~{x7q/n0中文JAVA技术网C6^v3]"k"Es中文JAVA技术网"J SYDyu BC U H n]    newStatusCode = "NYP";
*C&t GZ!p F3m0}中文JAVA技术网+pqZ$l ?~$TZ)b$o]

M$p/gg0W*GI }K1z0  能看明白if条件语句是干什么的吗?能想出来是谁写的这段代码吗?如果把它分成两段独立的if语句,是不是更容易理解呢,下面是修改后的代码:
? vT#p _ @6{4a0中文JAVA技术网+D*p%y2TrD | [t-|,]
中文JAVA技术网O%uT,K7B }&{1o8svif(newStatusCode.equals("SD") && (sellOffDate == null ||todayDate.compareTo(sellOffDate)<0
中文JAVA技术网CxAnLS[\h || (lastUsedDate != null &&todayDate.compareTo(lastUsedDate)>0))){
(w VH)kb"cO0    newStatusCode = "NYP";中文JAVA技术网 F TX-DVC#^
}
else{中文JAVA技术网a TN i#d;Ri
    if(newStatusCode.equals("OBS") && (OBSDate == null ||todayDate.compareTo(OBSDate)<0)){
#~+g^KqB0中文JAVA技术网o:oN"{pmz.qH4t\_bl&I^yJ0        newStatusCode = "NYP";
2o;B6\/{C#m` c.S/v0    }
}
2K:M'mvS!Z0^x4F}r0
*P2m"E0|xy0  是不是读起来容易多了呢,在此只是多加了一个if和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。
yp#m.R3nU ~fgX7Y0
7@.Ca&\y1p)Oa!mF0  四、请不要硬编码。开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢?中文JAVA技术网JL,s9e a+R%T8x

*W0ic%Zgp b?0public class A {
!|U5]t[,o[-[0    public static final String S_CONSTANT_ABC = "ABC";中文JAVA技术网 g/~"s u"` @XKlZ
    public boolean methodA(String sParam1){中文JAVA技术网IZ.NO ~(Q$t
        if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
H]/t7O/M um0            return true;中文JAVA技术网D t7\KX7Pv%[zI
        }中文JAVA技术网#G-\i!{BEk
        return false;
c C?A-z(Q9h4b+| a[0    }
-V%U B c:T0}中文JAVA技术网a f*ucX
中文JAVA技术网,M ?Ji#M.dz"b yQ6[L
  现在,每次需要将“ABC”与其他变量进行比较时,不必记住实际代码,直接引用A.S_CONSTANT_ABC就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。
_;z#M;GI}|6m#h:n0
.\uF}E$\0  五、不要“创造”自己的框架(framework)。确切来说,有数以千计的各种框架存在,而且大多数是开源的,这些框架都是优秀的解决方案,可用于日常程序开发中,我们只需使用这些框架的最新版本就行了,至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是Struts了,这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢,还是省点力气吧,回头看看第二条——不要让事情复杂化。另外,如果正在开发的程序只有3个窗口,就不要使用Struts了,对这种程序来说,不需要那么多的“控制”。
G$Ig.C+}0中文JAVA技术网 O'CM.DXSy$V&]D
  六、不要使用println及字符串连接。通常为了调试方便,开发者喜欢在可能的所有地方都加上System.out.println,也许还会提醒自己回过头来再来删除,但有些时候,经常会忘了删除或者不愿意删除它们。既然使用System.out.println是为了测试,那么测试完之后,为什么还要留着它们呢,因为在删除时,很可能会删除掉真正有用的代码,所以不能低估System.out.println危害啊,请看下面的代码:
F ]?cIy0中文JAVA技术网/[C8Md7K
public class BadCode {中文JAVA技术网L k"VhV"A:P
    public static void calculationWithPrint(){
Q Esk POc5\0        double someValue = 0D;
k qjn!F.Hb+\0        for (int i = 0; i <10000; i++) {中文JAVA技术网.J ZNg#V%I
            System.out.println(someValue = someValue + i);中文JAVA技术网)? {`*Bl8^~"m
            }
-C(O,gf.Q a:N3^[0       }
4S.e;LF"@H6Mz0    public static void calculationWithOutPrint(){中文JAVA技术网 c%Gq2hz jJ,E"XA
        double someValue = 0D;
5^R$_ SYsi0        for (int i = 0; i < 10000; i++) {
%_,cqV(M Y0            someValue = someValue + i;中文JAVA技术网 H&xVus'B
        }中文JAVA技术网ur U/qS}]o ah
    }
R3^ X0KU+]0    public static void main(String [] n) {
G6WXQxa{0        BadCode.calculationWithPrint();
$?_ Mk ]jC0        BadCode.calculationWithOutPrint();
-T3gz!^6zK0      }
x$x:q g @3I0}中文JAVA技术网Y-N|_R\p
中文JAVA技术网8u9_l?!O q$H,M1C
  从测试中可以发现,方法calculationWithOutPrint()执行用了0.001204秒,作为对比,方法calculationWithPrint()执行可是用了10.52秒。
U7mcP],{;@r$U0中文JAVA技术网:Z+}V,Ra
  要避免浪费CPU时间,最好的方法是引入像如下的包装方法:中文JAVA技术网`_8E7nT
中文JAVA技术网6k)WAk }
public class BadCode {
yQ(HXs;t(F,qXD0     public static final int DEBUG_MODE = 1;
N&ox.vAD y0        public static final int PRODUCTION_MODE = 2;
(L4tph+K MB!A4Z0        public static void calculationWithPrint(int logMode){中文JAVA技术网)b,`?,r&^/`8x,l)];e7rs
        double someValue = 0D;中文JAVA技术网}4IF#bZf,n
        for (int i = 0; i < 10000; i++) {中文JAVA技术网"x(}1S T/]$X%};g;FD
            someValue = someValue + i;中文JAVA技术网 P)rS8GG?Jm
            myPrintMethod(logMode, someValue);中文JAVA技术网(AA_gN{bz#~&f
        }
A5_x f&~{0    }
n k!{9~6u%i&d:`0    public static void myPrintMethod(int logMode, double value) {
\W;J3V b/X @{3h%P2\0        if (logMode > BadCode.DEBUG_MODE) { return; }
+{t Av|~0        System.out.println(value);中文JAVA技术网B2D F]0U@8\
    }
_#If \_~[0    public static void main(String [] n) {
B*q W.Y"eNx1W(`.QO u0        BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
D&g x3h)e0    }中文JAVA技术网,Qv V`a^&I*N$CVn
}
C mo4A`)|1zT,o0中文JAVA技术网 ej!lr6}M,n%z
  另外,字符串连接也是浪费CPU时间的一个大头,请看下面的示例代码:中文JAVA技术网4T}/D5n7SvI
中文JAVA技术网4Qp/b&gyQC;Xb
public static void concatenateStrings(String startingString) {中文JAVA技术网$W@0U@9g(eq6bUQ)u1P
    for (int i = 0; i < 20; i++) {中文JAVA技术网q/_&e x-rc
        startingString = startingString + startingString;中文JAVA技术网YRTS6pa
    }
cUV S4c7Y2V }
O~%ET#@ wC!?\0public static void concatenateStringsUsingStringBuffer(String startingString) {中文JAVA技术网3C%NZw]ZK y$U
    StringBuffer sb = new StringBuffer();
UV#wS3B I#f,Z0    sb.append(startingString);
|0\;?[}0    for (int i = 0; i < 20; i++) {
4{%Z.e(L2P6_M4U1_(p0    sb.append(sb.toString());
@#Y*mqE@L!c+X0    }中文JAVA技术网*aR4J[mhU!u9Vht
}
&we2r0u fb~'Nn4o?0
"_ eu5g B0CI0  在测试中可发现,使用StringBuffer的方法只用了0.01秒执行完毕,而使用连接的方法则用了0.08秒,选择显而易见了。
F(h r|%b2|1N0
Wu TL;JSl0  七、多关注GUI(用户界面)。再三强调,GUI对商业客户来说,与程序的功能及效率同等重要,GUI是一个成功程序的最基本部分,而很多IT经理往往都没注意到GUI的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识,结果,很多开发出来的程序都是“计算机友好”甚于“用户友好”。很少有开发者同时精通软件开发及GUI设计,如果你在公司“不幸”被分配负责程序界面,就应该遵守下面三条原则:
4y-g#b#Fn N0
t(x P"GK6EiH'{WY~0  1、 不要再发明一次轮子,即不做无用功。现有的程序可能会有类似的界面需求。
+f7xeO%E)m+_0  2、 先创建一个原型。这是非常重要一步,用户一般想看到他们将使用的东西,而且可以先利用这个原型征求用户的意见,再慢慢修改成用户想要的样子。中文JAVA技术网!t Z-t@&]:s`
  3、 学会换位思考。换句话来说,就是从用户的角度来审查程序的需求。举例来讲,一个汇总的窗口可以跨页或者不跨页,作为一个软件开发者,可能会倾向于不跨页,因为这样简单一些。但是,从用户的角度来看,可能不希望看到上百行数据都挤在同一页上。中文JAVA技术网3n&z#E;RjYT

q(sR3U V?z-m0  八、文档需求不放松。每个商业需求都必须记录在案,这可能听上去像童话,似乎在现实生活中很难实现。而我们要做的是,不管开发时间多紧迫,不管最终期限多临近,对每个商业需求都必须记录在案。
+e P1?Tz'U&f6]0中文JAVA技术网 a3E L|TWO2Y3@
   九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试一定要完成,这也是编程中最基本的原则。当然了,如果有人帮你做单元测试自然是最好,如果没有,就自己来做吧,当创建一个单元测试计划时,请遵守以下三条最基本的原则:中文JAVA技术网 d Pc$}8UY0R8V7n

Sq-P Y`a%J-O0  1、 先于编写类代码之前编写单元测试。中文JAVA技术网 ]a s ?/NXE4|h
  2、 记录单元测试中的代码注释。中文JAVA技术网+A ME9Z%D4@^
  3、 测试所有执行关键功能的公有方法,这里不是指set和get方法,除非它们是以自己独特方式执行set和get方法。中文JAVA技术网:b7eT z i*P;H
中文JAVA技术网hQd8p'e6u y2x
  十、质量,而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情,导致常常不能按时下班,但一般而言,公司不会因为雇员经常加班而对之表扬和奖励,公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug少且可维护性高,无形中质量提高了一大步。 

发表于 @ 2008年03月26日 17:54:00|评论(loading...)|编辑

新一篇: 基于Ajax的应用程序架构汇总 | 旧一篇: MYSQL Like查询不区分大小写

评论

#d8111 发表于2008-03-26 20:36:55  IP: 58.49.48.*
总结的很好,呵呵。总有一些新人喜欢sysout 一堆调试信息,批评他们,他们倒是据理力争“我只是测试而已,等下删”
#linda003 发表于2008-03-27 10:27:43  IP: 116.24.240.*
总结ing
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © eric