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

标签: 项目 开发 常见 | 发表时间:2014-07-01 18:22 | 作者:xigua366
出处:http://www.iteye.com

从事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 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [项目 开发 常见] 推荐:

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

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

IT项目的常见风险及应对措施

- - CSDN博客研发管理推荐文章
     以下是笔者总结出来的IT项目的常见风险及应对措施,供大家参考. 做好团队建设工作、从技能上备份人才. 尽量细化需求描述,建立需求变更流程并严格执行. 事先签订合作协议,明晰双方责任和义务,记录过程证据. 事先达成验收共识,不折不扣地按计划执行,多和关键人员汇报及沟通. 多和领导沟通、经常向领导汇报工作情况.

常见算法在实际项目中的应用

- - 博客 - 伯乐在线
近日Emanuele Viola在Stackexchange上提了这样的一个问题,他希望有人能够列举一些目前软件、硬件中正在使用的算法的实际案例来证明算法的重要性,对于大家可能给到的回答,他还提出了几点要求:. 使用这些算法的软件或者硬件应该是被广泛应用的;. 例子需要具体,并给出确切的系统、算法的引用地址;.

Web项目性能问题常见定位方法梳理

- - 互联网 - ITeye博客
第一类:请求无响应,浏览器始终处于等待状态. 定位方法:kill -3或者jstack先分析线程堆栈,找到当前block的线程. 常见于:外部接口调用无返回或者网络IO阻塞无响应;死锁;死循环;……. 定位方法(这一类问题普遍比较难定位):.     (1)寻找hs_err_pidxxx.log这样的JVM日志.

使用Spring Boot开发Web项目

- - ImportNew
前面两篇博客中我们简单介绍了spring Boot项目的创建、并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so,今天我们就来看一下如何使用Spring Boot来开发Web项目. 当然,如果小伙伴对Spring Boot尚不熟悉的话,可以先参考一下这两篇博客:.

常见电商项目的数据库表设计(MySQL版) - 简书

- -
电商常用功能模块的数据库设计. 改进1:第三范式:将依赖传递的列分离出来. 比如:登录名<-用户级别<-级别积分上限,级别积分下限. 改进2:尽量做到冷热数据的分离,减小表的宽度. 用户登录表(customer_login). 用户信息表(customer_inf). 用户级别表(customer_level_inf).

复盘node项目中遇到的13+常见问题和解决方案

- - 掘金前端
笔者之前陆陆续续接手过几个 nodejs项目, 也参与过几个有点意思的 nodejs开源项目, 最近把其中遇到的一些问题和解决方案做一个梳理, 避免大家继续踩坑. window和mac下设置NODE_ENV变量的问题. 我们都知道在前端项目中会根据不同的环境变量来处理不同的逻辑, 在 nodejs中也一样, 我们需要设置本地开发环境, 测试环境, 线上环境等, 此时有一直设置环境变量的方案是在 package.json中的 script属性中设置, 如下:.

常见的iOS手机应用开发流程

- - Tech2IPO
iOS应用开发无疑仍会是未来一段时间内的热门,因此,不管是对开发者还是企业管理人员来说,或多或少了解一些应用开发流程十分有必要,本文涉及的大部分内容并不局限于iOS应用,同时也适用Android、Windows Mobile和Blackberry等其他移动平台. iPhone应用的开发并不是一个简单的过程,建议按照以下步骤逐条考虑:.

Web开发常见的几个漏洞解决方法

- - 博客园_知识库
本文主要根据本人项目的一些第三方安全测试结果,以及本人针对这些漏洞问题的修复方案,介绍在这方面的一些经验,希望对大家有帮助.   基本上,参加的安全测试(渗透测试)的网站,可能或多或少存在下面几个漏洞:SQL注入漏洞、跨站脚本攻击漏洞、登陆后台管理页面、IIS短文件/文件夹漏洞、系统敏感信息泄露.   1、测试的步骤及内容.

软件开发中常见的十大系统瓶颈[转载]

- - CSDN博客推荐文章
在 Zen And The Art Of Scaling - A Koan And Epigram Approach中, Russell Sullivan提出了一个非常有趣的总结:软件开发常见的20个传统的系统瓶颈,这听起来像是说有 20个故事情节,并且依赖于你如何策划这些故事,或许都是真的,但唯有实践才知道它们带给我们的酸甜苦辣.