`

程序员注意:Java开发最容易犯的21种错误(转)

    博客分类:
  • java
阅读更多
发布时间:2008.05.22 08:49     来源:赛迪网    作者:sunboy

【赛迪网技术社区整理】

 

1.Duplicated Code

 

 

代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。

 

 

2.Long method

 

 

它是传统结构化的“遗毒”。一个方法应当具有自我独立的意图,不要把几个意图放在一起。

 

 

3.Large Class

 

 

大类就是你把太多的责任交给了一个类。这里的规则是One Class One Responsibility.

 

 

4.Divergent Change

 

 

一个类里面的内容变化率不同。某些状态一个小时变一次,某些则几个月一年才变一次;某些状态因为这方面的原因发生变化,而另一些则因为其他方面的原因变一次。面向对象的抽象就是把相对不变的和相对变化相隔离。把问题变化的一方面和另一方面相隔离。这使得这些相对不变的可以重用。问题变化的每个方面都可以单独重用。这种相异变化的共存使得重用非常困难。

 

 

5.Shotgun Surgery

 

 

这正好和上面相反。对系统一个地方的改变涉及到其他许多地方的相关改变。这些变化率和变化内容相似的状态和行为通常应当放在同一个类中。

 

 

6.Feature Envy

 

 

对象的目的就是封装状态以及与这些状态紧密相关的行为。如果一个类的方法频繁用get 方法存取其他类的状态进行计算,那么你要考虑把行为移到涉及状态数目最多的那个类。

 

 

7.Data Clumps

 

 

某些数据通常像孩子一样成群玩耍:一起出现在很多类的成员变量中,一起出现在许多方法的参数中,这些数据或许应该自己独立形成对象。

 

 

8.Primitive Obsession

 

 

面向对象的新手通常习惯使用几个原始类型的数据来表示一个概念。譬如对于范围,他们会使用两个数字。对于Money,他们会用一个浮点数来表示。因为你没有使用对象来表达问题中存在的概念,这使得代码变的难以理解,解决问题的难度大大增加。好的习惯是扩充语言所能提供原始类型,用小对象来表示范围、金额、转化率、邮政编码等等。

 

 

9.Switch Statement

 

 

基于常量的开关语句是OO 的大敌,你应当把他变为子类、state或strategy.

 

 

10. Parallel Inheritance Hierarchies

 

 

并行的继承层次是shotgun surgery的特殊情况。因为当你改变一个层次中的某一个类时,你必须同时改变另外一个层次的并行子类。

 

 

11. Lazy Class

 

 

一个干活不多的类。类的维护需要额外的开销,如果一个类承担了太少的责任,应当消除它。

 

 

12. Speculative Generality

 

 

一个类实现了从未用到的功能和通用性。通常这样的类或方法唯一的用户是testcase.不要犹豫,删除它。

 

 

13. Temporary Field

 

 

一个对象的属性可能只在某些情况下才有意义。这样的代码将难以理解。专门建立一个对象来持有这样的孤儿属性,把只和他相关的行为移到该类。最常见的是一个特定的算法需要某些只有该算法才有用的变量。

 

 

14. Message Chain

 

 

消息链发生于当一个客户向一个对象要求另一个对象,然后客户又向这另一对象要求另一个对象,再向这另一个对象要求另一个对象,如此如此。这时,你需要隐藏分派。

 

 

15. Middle Man

 

 

对象的基本特性之一就是封装,而你经常会通过分派去实现封装。但是这一步不能走得太远,如果你发现一个类接口的一大半方法都在做分派,你可能需要移去这个中间人。

 

 

16. Inappropriate Intimacy

 

 

某些类相互之间太亲密,它们花费了太多的时间去砖研别人的私有部分。对人类而言,我们也许不应该太假正经,但我们应当让自己的类严格遵守禁欲主义。

 

 

17. Alternative Classes with Different Interfaces

 

 

做相同事情的方法有不同的函数signature,一致把它们往类层次上移,直至协议一致。

 

 

18. Incomplete Library Class

 

 

要建立一个好的类库非常困难。我们大量的程序工作都基于类库实现。然而,如此广泛而又相异的目标对库构建者提出了苛刻的要求。库构建者也不是万能的。有时候我们会发现库类无法实现我们需要的功能。而直接对库类的修改有非常困难。这时候就需要用各种手段进行Refactoring.

 

 

19. Data Class

 

 

对象包括状态和行为。如果一个类只有状态没有行为,那么肯定有什么地方出问题了。

 

 

20. Refused Bequest

 

 

超类传下来很多行为和状态,而子类只是用了其中的很小一部分。这通常意味着你的类层次有问题。

 

 

21. Comments

 

 

经常觉得要写很多注释表示你的代码难以理解。如果这种感觉太多,表示你需要Refactoring。

分享到:
评论

相关推荐

    程序员开发宝典

    程序员开发宝典,一些开发中常见的错误

    JAVA程序员必读基础篇

    JAVA是有SUN公司开发的新一代编程语言,它可以用在各种不同的机器、操作系统的网络环境中...所以作为Internet应用的开发技术人员不可不看JAVA,而JAVA程序不可不先从基础学起,这正是JAVA程序员必读:基础篇的用意。

    Java开发程序员必知的Java编程的10种错误

    Java 开 发 程 序 员 必 知 的 Java 编 程 的 10 种 错 误

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc java面试书籍源码 Java面试笔试题库....

    java源码包---java 源码 大量 实例

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    java源码包2

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    阿里java开发手册-泰山版

    正所谓无规矩不成方圆,在程序员的世界里,也存在很多规范,阿里出版的Java开发手册就是其中之一,从各个方面都约束了程序员该如何有规矩的写代码,以及如何写好代码。 据官方描述,本次共计新增 34 条规约,修改...

    java源码包4

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java源码包3

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc java面试书籍源码 Java面试文档题库 ...

    java是什么.avi

    java学习第一天,讲解java是什么 本章学习要点 了解 Java 语言的版本及特点 了解学习 Java 的方法 掌握 JDK 的安装 掌握环境变量的配置 熟悉 Java 程序的编写、...14.Java初学者容易犯的错误 15.Java程序员学习路线

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    java优秀程序员编程规范

    良好的编程习惯,会使你受益无穷。即使你写代码非常牛,有些编程习惯也许本身就是错误的。比如,你写了好几百行,但是连一个注释都没有。那么,其他的人阅读这样的代码,困难实在是很大。

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188).zip

    Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc Java面试文档题库 Java面试笔试题库....

    编程中常犯的两个错误

    java程序员的必备

    (优质)程序员转正答辩ppt

    五个月的工作实践,我遇到了很多挫折,也犯过很多错误,这使我收获了很多,也使我体会到了各位领导和同事们的关心,真正体会到公司各个团队协作的力量。我将以积极进取的工作热情和踏实勤勉戒除焦躁的工作态度,较好...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc Java面试文档题库 Java面试笔试题库....

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...

    Java代码开发常见问题培训

    java程序员在开发代码过程中常常会犯一些错误,导致系统出现异常,本培训就一般的常见问题进行描述,方便程序员进行规避。

Global site tag (gtag.js) - Google Analytics