锘??xml version="1.0" encoding="utf-8" standalone="yes"?> programming by intention
There are always exceptions. Sometimes it is just clearer, and reads better, if you have type information in the method name. 鍖呮嫭浣跨敤闅愬柣錛屾祴璇曚紭鍏堬紝閲嶆瀯錛屼綔鍑哄亣瀹氾紝璁╃紪璇戝櫒鍛婅瘔浣犱笅涓姝ュ仛浠涔?榪欏嚑縐嶆妧宸с?BR>
鎰忓浘緙栫▼
int totalRating = calculateTotalRating();
return totalRating / ratings.size();
}
Use accepted conventions for accessors and mutators
return category;
}
public void setCategory(Category aCategory) {
category = aCategory;
}
public boolean isOfCategory(Category aCategory) {
return category.equals(aCategory);
}
public boolean isRated() {
return !ratings.isEmpty();
}
public boolean hasRating() {
return !ratings.isEmpty();
}
public int size() {
return movies.size();
}
Don't put redundant information in method names
if (this.contains(movieToAdd)) {
throw new DuplicateMovieException(movieToAdd.getName());
}
movies.add(movieToAdd);
}
ratings.add(ratingToAdd);
}
private String name = "";
private Category category = Category.UNCATEGORIZED;
private List ratings = null;
//
}
濡備綍鎰忓浘緙栫▼
鍏敤璇嶆眹琛?甯姪浣犵悊瑙h繖涓鍩熴?BR> 甯姪浣犲彇鍚嶅瓧銆?BR>
緇存姢涓濂楃▼搴忓憳嫻嬭瘯鐨勬鏋?/P>
闄ら潪瀹冨凡緇撳悎嫻嬭瘯錛屼駭鍝佷笉鍐欏叆浠諱綍浠g爜
鍏堝啓嫻嬭瘯
嫻嬭瘯鍐沖畾浣犻渶瑕佸啓浠涔堜唬鐮?/P>
浣犻渶瑕佸鍔犵被鎴栬呮柟娉曪紝緙栬瘧鍣ㄤ細鍛婅瘔浣犮傦紙eclipse浼氬悜浣犳姳鎬ㄦ湁cannot be resolved 鐨勶級
涓嬮潰鐪嬬湅浠g爜鐨勬紨榪?BR>鈽嗗啓嫻嬭瘯鐨勬椂闂存瘮鍐欎唬鐮佺殑鏃墮棿榪樺?
鍦ㄦ湁浜涙儏鍐典笅鐨勭‘濡傛,浣嗘槸涓嶈澶媴蹇?涓轟粈涔堝憿? 鏍規嵁鎴戠殑浣撲細:
1.鏈変簡嫻嬭瘯,浣犱細灝戝啓寰堝鏈潵涓嶉渶瑕?鍒濈湅璧鋒潵搴旇鏄湁鐢?鐨勪唬鐮?/P>
2.鍐欐祴璇曠殑榪囩▼灝辨槸鍦ㄨВ鍐抽棶棰樼殑榪囩▼,鍥犳浣犱細姣旇緝瀹規槗,灝芥棭鍦版槑鐧戒綘鍒板簳搴旇鍋氫粈涔?榪欐牱鍦ㄥ啓浠g爜鏃?灝辮兘鑺傜渷鏃墮棿
3.瀵歸噸鏋勫府鍔╁緢澶?鏈変簡嫻嬭瘯,浣犳墠鑳芥斁蹇冨ぇ鑳嗙殑榪涜閲嶆瀯.
4.闀胯繙鏉ョ湅,鍥犱負TDD浼氫績榪涗綘鍐欏嚭濂界殑浠g爜,騫朵笖浣犱細緇忓父鐨勯噸鏋?鍥犳浼氶檷浣庣淮鎶や唬浠?/P>
鈽嗛渶瑕佷負姣忎釜鏂規硶緙栧啓嫻嬭瘯鍚?
褰撶劧涓嶉渶瑕?鎴戜滑鎵鍐欑殑嫻嬭瘯蹇呴』鏄拡瀵規帴鍙f柟娉曠殑.涓鑸涓哄鐞嗕笟鍔¢昏緫鐨勬柟娉?浠ュ強棰嗗煙妯″瀷瀵硅薄鐨勫叧閿涓烘槸蹇呴』榪涜嫻嬭瘯. 鍏跺畠鐨勪竴浜涙柟娉曢渶瑕佽嚜宸辨妸鎻?褰撶劧榪欓渶瑕佺粡楠?
鎴戠幇鍦ㄥ彧鏄竴涓柊鎵?娌℃湁鍟ョ粡楠?鎴戝垽鏂煇涓柟娉曟槸鍚﹂渶瑕佹祴璇?渚濇嵁鏈変袱鏉?
1.鏄惁婊¤凍鎴戜笂闈㈠垪鍑虹殑蹇呴』嫻嬭瘯鏉′歡
2.鏄惁鍊肩殑嫻嬭瘯,榪欎竴鏉′富瑕佹槸蹇冪悊鍥犵礌,渚嬪瀵規煇涓柟娉曟劅瑙夊績閲屾病搴?閭e氨鍏堢紪鍐欐祴璇?
鈽員DD鏄竴縐嶆祴璇曟柊鎶鏈悧?
褰撶劧涓嶆槸,TDD鏍規湰灝變笉鏄竴欏規祴璇曟妧鏈?瀹冩槸涓縐嶆柊鐨勫紑鍙戞柟寮?鍙槸鍊熷姪嫻嬭瘯鑰屽凡.
鈽嗛」鐩竴寮濮嬫病鏈夐噰鐢═DD,鍦ㄩ」鐩腑鏈熷啀寮曞叆TDD,鍙鍚?
涓鑸潵璇翠笉鎺ㄨ崘鍦ㄩ」鐩腑鏈熷啀寮曞叆TDD,榪欐槸鐢變簬TDD鍐呭湪鐗規у喅瀹氱殑.
1.TDD鏄竴縐嶆柊鐨勫紑鍙戞柟娉?鍦ㄥ紑鍙戣繃紼嬩腑灝遍渶瑕佷綘杞彉鎬濇兂,闇瑕佸湪瀹炶返涓嶆柇瀹屽杽鑷繁,鑰屼笖瀹冩湰韜氨鍏鋒湁涓涓緝闄″涔犵殑鍧″害,榪欎竴鐐瑰湪寰堝鏂囩珷涓兘鎻愬埌榪?鍥犳鍦ㄩ」鐩腑鏈熷紩鍏DD,浼氱珛鍗蟲嫋寤墮」鐩繘灞?瀵歸」鐩湰韜府鍔╀篃涓嶄細澶ぇ.
2.TDD鍦ㄤ綘寮濮嬪啓嫻嬭瘯鏃?浼氶┍鍔ㄤ綘瀵歸棶棰樿繘琛屾濊?鐒跺悗鎸佺畫榪涜鍔熻兘澧炲己鍜岄噸鏋?鍦ㄩ」鐩腑鏈?濡傛灉浣犵紪鍐欎竴涓祴璇?榪欐椂浣犻渶瑕侀」鐩棭鏈熺殑涓涓粍浠?浣嗘槸榪欎釜緇勪歡騫舵病鏈夋弧瓚充綘鐨勬祴璇?鍥犱負鏍規湰灝辨病鏈夋祴璇?.鐜板湪鍥犱負璇ョ粍浠舵湁闂,嫻嬭瘯閫氫笉榪?濡傛灉榪欐椂浣犲啀涓鴻緇勪歡緙栧啓鍗曞厓嫻嬭瘯,灝卞け鍘諱簡嫻嬭瘯椹卞姩寮鍙戠殑浼樺娍浜?姝ゆ椂TDD鐨勬晥鏋滃氨澶ф墦鎶樻墸浜?
褰撶劧,鍦ㄦ病鏈夐」鐩帇鍔涚殑鎯呭喌涓?寮曞叆TDD鏄病鏈変換浣曢棶棰樼殑.涓嶈繃鎴戣繕鏄帹鑽愬湪欏圭洰寮濮嬪氨寮曞叆TDD鏄渶浣抽夋嫨.
鈽嗕負涔熷瓨鍦ㄧ殑緇勪歡琛ュ厖鍗曞厓嫻嬭瘯鍊煎緱鍚?
鍦ㄤ笂涓闂鐨勭浜岀偣鍘熷洜涓凡緇忔彁鍒拌繃,鎰熻涓嶅煎緱.鍦ㄨ繖縐嶆儏鍐典笅,鐢ㄤ竴鑸殑鏂規硶嫻嬭瘯涓涓嬪嵆鍙?姣斿java鐨刴ain()鏂規硶.
鈽員DD緙栧啓鐨勬祴璇曟渚嬫槸姣旇緝澶嶆潅鐨勫悧?
鍦═DD涓?嫻嬭瘯鏄竴姝ヤ竴姝ユ紨鍖栫殑,闇瑕佷綘涓鐩翠繚鎸佺畝鍗曡璁$殑鐞嗗康,鍥犳,涓鑸祴璇曟渚嬫槸姣旇緝娓呮櫚鐨?濡傛灉鍙戠幇浣犵殑嫻嬭瘯闈炲父澶嶆潅,搴旇鏄綘娌℃湁鎶撲綇闂鐨勯噸鐐規垨鑰呮病鏈夋帉鎻℃紜?鏈夋晥鐨勬柟娉?
Extreme Programming is obsessed with feedback, and in software development, good feedback requires good testing. Top XP teams practice "test-driven development", working in very short cycles of adding a test, then making it work. Almost effortlessly, teams produce code with nearly 100 percent test coverage, which is a great step forward in most shops. (If your programmers are already doing even more sophisticated testing, more power to you. Keep it up, it can only help!)
It isn't enough to write tests: you have to run them. Here, too, Extreme Programming is extreme. These "programmer tests", or "unit tests" are all collected together, and every time any programmer releases any code to the repository (and pairs typically release twice a day or more), every single one of the programmer tests must run correctly. One hundred percent, all the time! This means that programmers get immediate feedback on how they're doing. Additionally, these tests provide invaluable support as the software design is improved.