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

从事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、常量类的大量重复定义。

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

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值