首页

分享关于Java项目开发规范文档及相关注意点总结

标签:java,开发规范,注意点,事项     发布时间:2017-06-26   

1.接口出参

接口出参应为:状态码(responseCode)+状态信息(responseMsg)+业务数据(data),所有业务数据封装在data中,data可为集合或数组,入参与出参如下

参数名

类型

是否必须

说明

入参

业务参数

-

N

业务相关字段

出参

responseCode

String

Y

状态码

responseMsg

String

Y

状态信息

data

Map/List

Y

业务数据

参数名

类型

是否必须

说明

data

 

业务相关数据Key

-

Y

此data中的数据为具体业务中需要返回的数据

2.注释

类,接口,方法(除了get/set方法,特别简单的方法,以及实现接口的方法)都必须写注释,说明类,接口,方法的作用,像下面这样:

类名前的注释@b@/**@b@* 调用系统提供的相关服务@b@* @b@* @author  junni@b@* @b@*/@b@public class MopSAOImpl implements MopSAO, BeanFactoryAware {@b@ @b@接口名前的注释@b@/**@b@* 系统提供的相关服务@b@* @b@* @author junni@b@* @b@*/@b@public interface MopSAO extends SAO {@b@ @b@方法的注释@b@/**@b@* 查询Offer满立减红包@b@* @param param@b@* @return@b@* @throws Exception@b@*/@b@Map<String, Object> queryOfferRedBag(Map param) throws SAOException;

3 格式化代码,保持代码的整洁;

4 尽量使得方法完成功能单一,使得方法得到充分的复用;

5 类名,方法名,变量名要起得有意义,做到不用注释即可理解;

6日志打印,一般在方法进入和退出点都要打上日志,关键点也要打上日志;严禁使用System.out.println打印日志,只能使用Logger

7 ESA/Controller类里只注入Service,SAO,不允许注入DAO;

8 DAO一般是注入Service里,业务逻辑都在Service里实现;

9 ESA/Controller里只进行参数的赋值,接口的调用,不允许出现较多的业务逻辑;

10 使用DTO对象来作为访问数据库接口的入参和出参;

11 不要取得数据表里所有的字段,按需读取;

12 使用equals匹配内容常量在前,变量在后,避免变量为null时运行报错

13 字符串空值判断使用StringUtils.isBank()和StringUtils.isNotBank()

14 所有实体类要重写toString()

@Override@b@    public String toString() {@b@       try {@b@           return BeanUtils.describe(this).toString();@b@       } catch (Exception e) {@b@ @b@       }@b@       return "";@b@    }

15 SQL映射文件中使用预处理语句

所有参数外部传入,不要在sql中写死,数据获取使用#{},任何情况下禁止使用${}

16 除非业务逻辑要求,任何情况下严禁在循环体中调用数据库,批量插入语句:

<!-- 新增角色权限 -->@b@<insert id="addRolePower" parameterMap="backRolePowerAddDTO">@b@	INSERT INTO  role_power@b@	(@b@		id,ROLE_ID,POWER_ID,created_by,created_Date@b@	)@b@	<foreach collection="batchAddRolePowerList" separator="union all"@b@			item="rolePowerSingle" index="index">@b@			select								#{rolePowerSingle.id},#{rolePowerSingle.roleId},#{rolePowerSingle.powerId},#{rolePowerSingle.createdBy},#{rolePowerSingle.createdDate}@b@			from dual@b@	</foreach>@b@</insert>@b@@b@@b@<!-- IN 语句如下:-->@b@  <if test="targetList != null and targetList.size() != 0">@b@                              NOTICE_TARGET IN@b@		                              <foreach collection="targetList" open="(" close=")"@b@		                                separator="," item="targetList">@b@		                                #{targetList}@b@		                              </foreach>@b@		                            </if>@b@@b@<!-- 如果业务逻辑要求循环调用数据库,需进行评估-->

17 接口命名按照组件和功能模块、具体业务功能分三级

18 字段命名要与数据库同步,特殊情况需与中文名意义相符,做到不看接口文档也可知其意

19事务管理在Services层实现类中通过注解 @Transactional/在配置文件中集中配置实现,不要配置到Controller层

20 Spring注解规范::

         Controller层:@Controller 

         Service层: @Service

         Dao层: @Repository

         其他组件如Util等: @Component

如果要为交给spring管理的类指定名字要以驼峰命名的规范, service 和dao层指定名字的时要指定接口的名字不能带impl

20 Service是实现业务逻辑的地方,不要和前端controller有过分的紧耦合,所以一般不建议传入的参数里出现request,response等

21数据库中需要对即时时间进行计算或比较时等需要从java中传入,不要使用数据库自带时间

22接口查询、修改数据时,需做权限校验,避免出现越权操作

23接口form中所有字段均需用String格式接收,如果用其他格式,若匹配失败会直接把异常抛到responseMsg中

{"responseCode":"900103","responseMsg":"Failed to conve.lang.NumberFormatException"}

24后台异常返回,“responseCode”和“responseMsg”这两个字段的值定义在静态常量类里, 

25代码编写过程中要注意整理代码结构,提高其可读性,一般一个方法不要超过30行,如有特殊原因,需保证代码结构清晰,条例清楚,方便阅读

26全局变量规范:领域简称(大写)+应用简称(大写)+组件简称+业务功能码

@b@
<<热门下载>>