`
xigua366
  • 浏览: 101170 次
  • 性别: 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
分享到:
评论

相关推荐

    Visual C++开发实战1200例 (配光盘代码 第9章)

    本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用visual c++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像。全书分4篇15章,共计602个实例和...

    Android代码-快速开发框架

    AFBaseLibrary 序 这个库,其实我之前已经有封装过一些了,但是感觉还不规范,还...这部分包含了我在项目中所遇到的一些常见的界面结构的整理,其中Activity和Fragment都会有相匹配的功能,即Activity有的功能,Fragme

    网络安全开发包详解代码

    网络安全开发包是指用于网络安全研究和开发的一些专业开发函数库,它的主要作用是实现网络安全研究和开发的基本功能,为研究者和开发者进一步研究和开发网络安全提供编程接口,使网络开发人员能够忽略网络底层细节的...

    Visual C++开发实战1200例 (配光盘代码 第5章)

    本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用visual c++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像。全书分4篇15章,共计602个实例和...

    Visual C++开发实战1200例 (配光盘代码 第13章)

    本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用visual c++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像。全书分4篇15章,共计602个实例和...

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

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    C++代码走读意见--开发注意事项

    在项目开发过程中,因代码质量不过关,进行了代码走读,事后把意见留存,组织成word文档。在以后遇到相同的问题时可以快速解决。

    Visual C++开发实战1200例 (配光盘代码 第7章)

    本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用visual c++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像。全书分4篇15章,共计602个实例和...

    Visual C++开发实战1200例(第1卷) 明日科技 源代码

    《Visual C++开发实战1200例(第1卷)》以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Visual C++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像...

    ASP.NET开发典型模块大全 (修订版) (源代码)

    《ASP.NET开发典型模块大全(修订版)》以关键技术和热点技术为核心,通过27个典型模块和5章热点技术,全面地介绍了如何使用asp.net进行各领域的web项目开发。全书共3篇分为32章,第1篇关键模块篇,覆盖网站开发的...

    oracle开发帮助文档两部

    最后,我们会介绍一些 PL/SQL 编码规范,如果遵守它们,你会发现你们项目组内的代码变得更加容易管理。 SQL 概述:本章主要介绍一些开发中常用的基本 SQL。 SQL 常用函数:本章内容翻译自 Oracle9i 的《SQL ...

    java开发在工作中代码搜集

    该资料为chm电子书,为开发工作中遇到的工具类、功能代码、技术文档、语法类文档等 现已搜集接近一百个工具类、十多种功能代码、各种第三方类库搜集、springBoot使用文档、四种语法类文档、五个数据对照表、各种设计...

    ASP.NET开发典型模块大全源代码(1-10章)

    《ASP.NET开发典型模块大全》以关键技术和热点技术为核心,通过27个典型模块和5章热点技术、全面地介绍了如何使用ASP.NET进行各领域的Web项目开发。全书共3篇分为32章,第1篇关键模块篇,覆盖网站开发的关键领域,...

    Android开源项目,旨在搜集平常工作中遇到和可能需要用到的一些好的开源项目。.zip

    资源包中的文件手册部分,详细记录了Android开发的核心知识点和常用技术。无论是初学者还是有一定经验的开发者,都能从中找到所需的学习资料。手册采用了简洁明了的排版方式,使得查阅更加方便快捷。同时,手册内容...

    AT编程常见问题与错误代码的意义

    在使用model开发过程中常会碰到一些问题,这里详细罗列了AT编程过程中遇到的问题,及错误代码意义,希望对大家有用。

    ASP.NET开发实战1200例(第Ⅱ卷)源码

    本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用asp.net进行程序开发的各种知识和技巧。主要包括asp.net技术基础、vs 2008环境搭建,还详细讲解了c#语言设计入门,然后从常用web...

    泛微oa系统中一些常用的脚本,页面及调整方案更新于

    后续会不不定时在这⾥里里罗列列在项⽬目过程中遇到的⼀一些调整⽅方案, 此⽂文档主要记录的过去⼀一段时间内经常碰到的⼀一些问题,仅供参考,不不再解释和协助; 在对系统⻚页⾯面进⾏行行相关操作时请及时备份,因...

    PHP5+MySQL网站开发实例精讲 源码

    全书共分为四篇18章,以“PHP基础知识→MySQL数据库基础知识→PHP高级开发→常用模块编程与综合案例开发”为线索具体展开,不仅包括PHP开发环境的搭建、PHP的基本语法、PHP中的常用函数、在MySQL中创建数据库和数据...

    Java毕业设计-基于springboot开发的网上点餐系统-毕业论文(附毕设源代码).rar

    通过该项目,读者可以深入了解Spring Boot框架的核心特性,如自动配置、依赖管理、RESTful API设计等,并能够熟悉现代Web开发中常见的技术栈,如Spring MVC、MyBatis、Redis、MySQL等。 网上点餐系统作为现代生活中...

Global site tag (gtag.js) - Google Analytics