代码复审
我们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); }