`
xigua366
  • 浏览: 102745 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

项目开发中碰到的一些常见的不规范的代码

    博客分类:
  • java
阅读更多

从事java EE开发4年多了,从2011年尾开始参与一个大型电子商务系统,一直做到现在。项目在2012年10月完成了验收,2012年11月开始转运维,巧的是自己跟另外一个同事被客户指定为长期固定运维人员。就这样开始了1年多了运维工作。虽说是运维,但我们不需要管理服务器,不需要管理数据库,做的工作就是修改上生产后项目出现的一些问题(处理用户报障),同时开发一些新的需求(开发新功能),以及不断的优化重构项目源码,处理一些原功能存在的严重性能问题,提炼或从新定义共用的业务API等。

 

下面列举一些我这1年多运维工作中碰到的一些常见的不规范的代码。(之前有整理过文档,所以现在写这个博文一些内容直接copy过来的)

一、存在警告的代码。

1、冗余转换。 

2、集合类未使用泛型。 

3、定义未使用的变量或方法。 

4、import引入了过多的未用到的类。 

 

二、其它不规范的代码

5、在spring容器中存在的bean却使用new方式来构建实例。 

6、业务层捕获了异常却不抛出,导致事物无法回滚,而且异常没有抛出,但功能出错时,使用火狐的firebug插件也看不到错误信息,加大的代码的调式难度。

7、大量定义辅助性的vo类。(个人建议,开发业务功能时,尽可能使用pojo,封装数据或接收参数pojo搞不定的时候使用Map<String, Object>,而不用再定义一个java类,因为里面大量的字段跟pojo是重复的,大量的setter,getter操作也影响性能)

8、NullPointException,在对一个对象进行使用前,没有判断是否非空导致的空指针异常。

9、业务代码写到了controller层。(这样写不但降低了代码的可读性,而且如果controller中写了增、删、改的业务代码时也破坏了事物的完整性,一些对spring理解不深,对事物控制没什么概念的新手经常这样搞)

10、常量类的大量重复定义。(开发时可能各个开发人员很少去看别人的代码,如果项目经理没有统筹规范好的话,很容易导致开发人员自己定义常量自己用,而有些常量是整个系统可以共用的,大量的重复定义加大了维护的难度。)

11、在js中拼写HTML代码。(对于很多jQuery用的不熟的新手经常这样搞)

12、与金额有关的字段,很多被定义成了double类型,其实double是存在精度问题的,应该采用BigDecimal替换之。(运维期修改了很多这样的代码)

 

以上列举了12种常见的不规范代码,下面我贴一些代码举例说明。

1、冗余转换。



上图中因为List使用了泛型,下面的for循环中就不需要强制转型了。(当然转了也不会有错) 

 

2、集合类未使用泛型。 

 

 上诉报警告的代码虽然也没错,但jdk1.5就推出了泛型,所以用集合类时应该养成使用泛型的习惯。

 

3、定义未使用的变量或方法。



 上诉报警告的代码编译也不会错,但是既然一个变量定义了没有用到,就应该删掉。

多定义一个变量,应该就会多占用一点内存。

 

4、import引入了过多的未用到的类。 

 

 这个问题同样也不会引起编译错误,但没用到的类没必要引入进来。可通过按ctrl+shift+o来去除多余的import,也可通过设置eclipse,在保存java文件时自动删除这些多余的import,eclipse的设置方式如下图:



 

5、在spring容器中存在的bean却使用new方式来构建实例。 

我见的最多的是使用在业务bean中注入dataSource,然后new 一个JdbcTemplate对象,其实JdbcTemplate对象也是在spring定义了的,所以直接注入JdbcTemplate对象即可。而且spring容器默认的bean的scope是single=true,即单实例,直接注入JdbcTemplate对象可以避免大量JdbcTemplate实例占用内存(虽然会被gc自动回收掉)。

如下图:



 上图注入的是一个dataSource,其实可以直接注入JdbcTemplate对象的,因为JdbcTemplate对象也定义在了spring容器中,见下图:



 

所以前面的代码可修改为直接注入JdbcTemplate对象,修改后如下图:



 

 

6、业务层捕获了异常却不抛出。



 直接打印了一下,写这样代码的开发人员明显是刚从学校出来的。

 

7、大量定义辅助性的vo类。



 如上图代码,会员各种数据按业务需要分别存放在dealer表跟dealer_personal_info表,当视图层需要会员数据时,需要将这两个表的一些数据进行返回。一些开发人员首先想到的就是新建一个vo类,里面定义好视图层需要的所有字段,然后从数据库查询数据封装好这个vo类并进行返回。这样做其实对性能影响挺大的,特别当查询很多数据,在一个循环里大量的setter getter。让我来重构这个代码,首先我就会删掉DealerInfoVo.java这个类,然后将会员数据封装到一个Map<String, Object>中,然后返回给视图层使用。

修改后的代码如下图:



 现在都流行“约定优于配置”,更应该采用Map的方式。

 

8、NullPointException,在对一个对象进行使用前,没有判断是否非空导致的空指针异常。

这个不举例了,有个1年开发经验的朋友都知道。

 

9、业务代码写到了controller层。

有开发经验的朋友都应该知道业务代码不能写在controller层,而要写到业务层或说应用层。

 

10、常量类的大量重复定义。

为避免大量重复的枚举常量定义,我的建议及现在的做法就是使用枚举类。首先把所有数据表字段有枚举值的字段定义一个枚举类,在开发时告知大家对于数据表枚举字段不允许定义常量,而要统一使用对应的枚举类。

 

以上是个人这些年的一些开发经验总结和见解,特同大家分享,欢迎指正,讨论。

  • 大小: 83.2 KB
  • 大小: 98 KB
  • 大小: 121.1 KB
  • 大小: 215.5 KB
  • 大小: 202.5 KB
  • 大小: 207.2 KB
  • 大小: 70.2 KB
  • 大小: 207.2 KB
  • 大小: 74.1 KB
  • 大小: 630.3 KB
  • 大小: 288.2 KB
分享到:
评论

相关推荐

    亮剑 Java案例导航项目开发 源代码

    "亮剑 Java案例导航项目开发 源代码"是一个针对Java初学者或进阶者提供的实践项目,旨在通过具体的案例帮助开发者深入理解Java编程语言。这个项目包含了完整的源代码,以便学习者能够直接查看和运行,同时提供了代码...

    亮剑 Java项目开发案例导航 源代码

    其次,项目开发过程中,你会遇到设计模式的应用。设计模式是解决软件设计中常见问题的成熟方案,如单例模式、工厂模式和观察者模式等。在《亮剑》的源码中,你可能会看到这些模式如何被巧妙地应用到实际项目中,以...

    代码编写规范 程序开发规范

    在软件开发过程中,代码编写规范和程序开发规范是至关重要的组成部分。它们确保了代码的可读性、可维护性以及团队间的协作效率。下面将详细阐述这些知识点。 首先,代码编写规范是指导开发者如何写出清晰、一致且...

    Java案例开发_项目开发风暴(含源代码)

    7. **JDBC**:Java数据库连接(JDBC)是Java访问数据库的标准接口,了解如何连接数据库、执行SQL语句、处理结果集等是项目开发中的常见任务。 8. **Servlet和JSP**:在Web开发中,Servlet处理服务器端请求,JSP负责...

    fpga嵌入式项目开发实战代码

    在电子工程领域,FPGA(Field-Programmable...总之,“fpga嵌入式项目开发实战代码”提供了宝贵的实践经验,通过实际操作,开发者能够深化对FPGA的理解,提高在嵌入式系统设计中的技能,为未来的项目开发打下坚实基础。

    PHP动态网站开发项目教程-源代码

    在本教程中,我们将深入探讨如何使用PHP进行动态网站开发,通过实际的项目代码来学习和理解PHP的核心概念和技术。这个教程旨在帮助开发者提升在PHP领域的技能,掌握动态网站的构建过程。 首先,PHP(Hypertext ...

    Java项目开发全程实录光盘源代码

    8. **设计模式**:在项目开发中,常见的设计模式如工厂模式、单例模式、观察者模式等,能提高代码的可读性和可维护性。 9. **MVC架构**:模型-视图-控制器架构是Web应用开发的常用模式,分离业务逻辑、数据模型和...

    Android开发的经典项目代码

    通过对这些经典项目代码的深入学习,初学者不仅可以掌握基本的Android开发技术,还能了解到实际项目中的最佳实践和设计模式。实践中遇到的问题和解决方案将有助于培养解决问题的能力,从而在Android开发的道路上...

    《Visual C++.NET专业项目实例开发》源代码

    7. **文件操作**:学习读写文件、流对象和序列化,这些都是项目开发中常见的任务。 8. **网络编程**:C++.NET提供了网络通信的能力,源码可能会涉及TCP/IP套接字、HTTP请求等。 9. **数据库访问**:利用ADO.NET...

    项目开发总结报告实例 项目开发总结报告实例打包下载

    项目开发总结报告是软件开发过程中的重要文档,它详尽记录了项目的整个生命周期,包括从需求分析、设计、实现、测试到上线维护等各个阶段的关键活动、遇到的问题、解决方案以及项目成果。以下是对项目开发总结报告...

    《PHP专业项目实例开发》源代码

    《PHP专业项目实例开发》是一本深入探讨PHP编程实践的书籍,其提供的源代码是学习和理解PHP在实际项目中的应用的重要资源。源代码通常包含了书中各个章节的示例程序和完整项目,让读者能够动手操作,加深对PHP语言...

    《jsp项目开发全程实录》源代码

    9. **项目管理**:书中可能涉及到了项目构建工具如Maven或Gradle,版本控制系统如Git,以及IDE如Eclipse或IntelliJ IDEA的使用,这些都是现代软件开发不可或缺的部分。 10. **错误处理与调试**:源代码中包含的错误...

    web项目开发流程以及规范

    ### Web项目开发流程及规范详解 #### 一、引言 随着互联网技术的快速发展,Web项目的复杂度也在不断增加。为了确保项目的顺利进行并达到预期的效果,制定一套合理的开发流程及规范变得尤为重要。本文将详细介绍Web...

    java项目开发常见问题分析

    在Java项目开发过程中,开发者经常会遇到一系列挑战,这些问题可能源于编码规范、性能优化、错误处理、编程习惯,甚至是特定框架的使用。以下是对这些常见问题的深入分析: 1. **开发规范类问题**:开发规范是确保...

    java项目开发验收交接整套模板

    在Java项目开发中,验收与交接是至关重要的环节,确保项目的质量和稳定性,同时为后续的维护和升级奠定基础。此"java项目开发验收交接整套模板"提供了全面的指导材料,帮助开发者和团队规范地完成这一过程。以下是...

    开发中的一些常用jar包下载

    这里提到的"开发中的一些常用jar包下载"涵盖了几个非常关键的Java库,它们在各种项目中都有广泛的应用。下面我们将分别详细介绍这些库的作用、功能以及如何在项目中使用它们。 1. **MySQL Connector**: MySQL ...

    Java项目开发全程实录-源代码

    在Java项目开发中,我们经常会遇到各种技术和概念,这些都在"Java项目开发全程实录-源代码"中有所体现。这个资源提供了从头到尾的项目构建过程,旨在帮助开发者深入理解Java编程语言以及相关技术栈的应用。让我们...

    JAVA项目开发案例全程实录光盘源代码第五讲代码

    在本Java项目开发案例中,我们深入探讨了Java编程在实际项目中的应用,特别是通过"JAVA项目开发案例全程实录光盘源代码第五讲代码"的学习,我们可以了解到一系列关键的知识点。这一讲主要聚焦于项目的某个特定阶段或...

    30天学通Java项目案例开发 源代码

    《30天学通Java项目案例开发 源代码》是一个专门为Java初学者设计的学习资源,旨在通过实际项目案例帮助读者在30天内掌握Java编程技能。这本书的源代码包含了一系列精心设计的实例,涵盖了Java开发中的核心概念和...

    30天学通C#项目开发代码

    同时,C#与数据库的交互,如ADO.NET,也是项目开发中的常见任务,学习如何使用SQL语句进行数据操作是必要的。 文件列表中的"30天学通C#项目开发代码"很可能包含了多个模块的示例代码,如登录注册系统、简单的计算器...

Global site tag (gtag.js) - Google Analytics