`
wdmcygah
  • 浏览: 60756 次
社区版块
存档分类
最新评论

十二、编写高质量的代码——思想为源(笔记)

    博客分类:
  • J2SE
阅读更多

 

本博文为《编写高质量代码—改善Java程序的151个建议》一书的阅读笔记。该书从很多方面给予了编写高质量代码的宝贵经验。而且该书应该是那种开发经验越丰富,体会越深的书籍。在阅读过程中,从该书中收获良多,这里主要作下书籍笔记,有体会的地方加点自己的想法。受限于知识水平,部分内容还没能深刻体会,所以更多更好的内容和具体实例还需要从书中去找寻。

编码不仅仅是把代码写出来,还要求清晰地表达出编码者头脑中的逻辑,准确地传递到计算机中执行,同时也能被其它编码者轻松阅读,而要实现这些目标,则要求代码有清晰、正确的思想,即编程思想。——秦小波(书籍作者)

一、提倡良好的代码风格

优秀团队的编码风格应该具有如下几个特征:

  1. 整洁:这样可读性好;
  2. 统一:这样减少代码的差异性,更易于理解;
  3. 流行:流行必有基因,风格值得参考;
  4. 便捷:有通用工具支持,这样降低统一风格的成本。

这部分内容我写过一篇博文《Java编码规范—"约定"也要"配置"》,算是一个具体的实现思路。

二、不要完全依靠单元测试来发现问题

主要有四个原因:

  1. 单元测试不可能测试所有的场景(路径):单元测试必须测试的三种数据场景是:正常场景、边界场景、异常场景。但是单元测试的代码覆盖率达到60%都很困难。覆盖不全则难免会有缺陷。
  2. 代码整合错误是不可避免的:单元测试往往测试的是一个独立单元,这样在不同单元间整合测试时难免出现错误。
  3. 部分代码无法(或很难)测试
  4. 单元测试验证的是编码人员的假设:有点自已验证自己的意思,难免因为思维局限或者理解偏差等原因验证不正确。

所以不能完全靠单元测试来发现问题,但单元测试是很重要的一环。以个从的经验而言:大的项目一般测试可能从需求阶段就开始介入,对于开发而言可能有单元测试,冒烟测试,集成测试,系统间联调测试,性能测试等等,而且很多测试工作是配合专门的测试团队完成。

三、让注释正确、清晰、简洁

注释是为了帮助代码阅读者更好地理解代码的,良好的注释习惯包括:

  1. 不要废话:只写与代码相关的注释,不要抒情。
  2. 不要用注释写故事:例如书中的汉诺塔算法注释把算法的故事分析应用比较都写上去了,没有必要。应该准确简单地表达。
  3. 不要添加不必要的注释:过于简单的注释,地球人都知道的就不要添加注释了。
  4. 注释及时更新:代码有变化时注意注释的更新。
  5. 注释不要写太多:注释写太多往往就喧宾夺主了,影响了代码的可读性。
  6. 不要用注释记流水帐:例如不要用注释记录代码版本的变迁,这应该交给版本管理工具。
  7. 为JavaDoc编写的注释也要考虑可读性:写注释也是为了人看的,标签写太多同样影响可读性。

四、让接口的职责保持单一

单一职责原则要示接口定义的时候尽可能保持单一,这样能最大程度地保证接口的稳定性,降低类的复杂度,同时也能增加可读性和可维护性。

五、增加类的可替换性

为了增加类的可替换性,在设计时需要考虑以下三点:

  1. 子类型必须完全实现父类型的方法:即子类型应该更多地是增强父类 的功能。
  2. 前置条件可以放大:即子类的方法参数可以比父类的范围大。
  3. 后置条件可以放小:即子类的返回值可以比父类的范围小。

六、依赖抽象而不是实现

  1. 尽量抽象:每个类都尽量有接口或抽象类,或两者都有。
  2. 表明类型必须是抽象的:比如对象申明时最好用接口声明。
  3. 尽量不要覆写父类的方法。
  4. 抽象不关注细节:抽象负责定义关系与公共部分的实现,具体业务逻辑应该由具体的实现类去实现。

七、抛弃7条不良的编码习惯

  1. 不良一:自由格式的代码
  2. 不良二:不使用抽象的代码
  3. 不良三:彰显个性的代码
  4. 不良四:死代码,即不可能被执行到的代码。
  5. 不良五:冗余代码,没有用的代码要及时删除。
  6. 不良六:拒绝变化的代码,旧的代码要注意重构更新。
  7. 不良七:自以为是的代码,即不写测试代码的代码,这样不便于质量检查。

八、以技术员自律而不是工人

提高技术修养的20条建议:

  1. 熟悉工具:工欲善其事,必先利其器。
  2. 使用IDE:能够提高编码效率。
  3. 坚持编码:只要是技术圈,不论什么岗位,都应该坚持。
  4. 编码前思考:即先设计后开发。
  5. 坚持重构:没有最好只有更好。
  6. 多写文档:写文档也是一个很好的整理思路的过程。
  7. 保持程序版本的简单性:多版本时注意合并。
  8. 做好备份:以防万一。
  9. 做单元测试:单元测试非常特别很必要。
  10. 不要重复发明轮子:在项目中使用已经成熟的工具或者框架,这样能大大减轻项目风险及工作量。当然研究性质的情况除外。
  11. 不要拷贝:不做代码搬运工。
  12. 让代码充满灵性:注意命名规范、注释等等。
  13. 测试自动化:合理地“偷懒”。
  14. 做压力测试:测试代码的健壮性。
  15. “剽窃”不可耻:多向优秀的开源项目学习。
  16. 坚持向敏捷学习。
  17. 重里更重面:注重UI设计。
  18. 分享:分享出去收获得更多。
  19. 刨根问底:不仅要解决问题,还得知道前因后果。多问几个为什么,在答案后面加上“是因为....”。
  20. 横向扩展:要扩展知识面,JVM、操作系统、硬件、网络、存储、协议都要去学习。

 

 

0
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics