我們CodingCook復審的是WWW的代碼,他們的項目是時間管理助手(TimeLine)。只是跟根據自己的經驗來看,不一定準
先說一下整體的感覺。WWW的代碼用了應該是比較符合面向對象的思想,借口,封裝隨處可見,也能見到一些設計模式。同時,以我的水平看來,代碼質量比較高,格式規范,沒有低級錯誤。
我主要就說我看的這個Logic模塊(加空行注釋1600+)
分項說明
1.? 注釋。這一點做的不錯,至少我看到了不少,能夠說明代碼的作用。基本上每一塊代碼前都有注釋。不足就是,存在幾塊廢棄代碼沒有刪除。
2.? 代碼格式。變量名非常符合C#的語言規范,且容易辨別有意義。四空格縮進。空行稍多,不是很習慣,不過這個和個人習慣相關。不足就是雖然許多地方斷句不錯,但仍有超長的代碼行存在(120+),不利用閱讀,建議是一行代碼不超過80(這樣的話,即使同一個顯示器分開兩個窗口,也不會造成閱讀困難)。同時,對于單語句的if格式不統一(詳見舉例)
3.? 異常捕獲。這一點這一段代碼做的不好。直接catch的是Exception。這是一個不好的編程習慣,雖然說比較方便,但是也不方便調試,同時也可能會忽略真正的錯誤,漏掉代碼隱藏的Bug。
4.? 其他。todo標記、warning標記,這個很好,不過要記得完成。
具體的代碼段列舉一二
1. 兩個if沒有必要,可以直接以 && 連接兩個條件,代碼功能完全相同
if (string.Compare(obj.Value, ip.TagLabel, true) == 0) {if (!gTagMapping.ContainsKey(obj.Key)){gTagMapping.Add(obj.Key, ip.TagLabel);inverseMapping.Add(ip.TagLabel, obj.Key);} }
?
2. return之后仍有代碼,應該是粗心導致。
return; //by kitty & fancy start if (string.IsNullOrEmpty(outputFileName))//outputFileName = "summary_from"+startTime+"_to_"+endTime+".txt"; outputFileName = "summary.txt";
?
?3. 單語句if格式應統一
if (cTask > 0)return iLiferInterface.DayState.DUEDATE;if (tag == -1) {tag = AddTagType(taglabel); }
??