代码是一面镜子
3月份开始启动新项目,一个asp.net的业务系统,一些基础功能自己写,一些功能使用了第三方的代码库,如:Spring.net,AspNetPager。也参考了很多成熟的ORMapping实现,如:Neo,actionpack,Enterprise Library 3.0,在这个过程中,最大的感受是代码质量。虽然说微软的企业库实现运用了过多的设计模式,实现也比较复杂,但无庸置疑代码质量是很高的,非常的规范。同样的,Spring.net的代码也很漂亮,尤其是文档,例子,单元测试都很齐全,一些设计思想和实现都值得学习。
好的代码看得多了,也就形成了自己的一些心得,即如何评价一个第三方代码库的质量:
1 基本的规范:类的设计,命名,函数调用,代码注释。
2 设计,为了解决一个问题,作者的思路是什么,为什么要这么做,是否考虑了效率和接口的清晰性。
3 文档和示例,有无概括性的说明,类函数的说明,以及实际使用的例子。
4 有无单元测试和单元测试的覆盖率。
其中第一条看似简单,但要做得好却并不容易,有一些代码库,虽然号称功能全面无所不能,但打开代码,看了一会就让人不忍卒读了:基本的输入参数不检查,缺少注释,功能函数写的很随意,类的层次不清晰。这样即使功能很多,也让人不敢采用。
最后一条,属于附加题,有无单元测试是一个标准,单元测试的覆盖率是另一个标准。
怎么说呢,首先是要有,因为功能稍微复杂一些的库,缺少单元测试会很难保证每一次修改不会影响其他模块的功能,也无法验证基本的功能是否正确。其次要看单元测试的多少,是否覆盖了主要的模块。有的时候一个好的代码库,因为作者的时间精力有限,无法保证编写了足够的单元测试,这时候,如果前两条做的好和文档写的清楚,我还是认为这是一份好的代码。因为从某种意义上讲,足够的单元测试覆盖率是属于富人的行为,在时间进度很紧的情况,很难做到。
说完了别人的代码,再看自己的代码,很多地方还是值得改进的。如类的设计,代码的清晰性等,这方面可以参看<<重构>>一书,里面对于代码的风格,结构都有很好的讨论,即要学会避免坏味道。
最后就像标题所述,代码是一面镜子,可以看清自己,也便于别人了解你。