codeStyle.md 8.99 KB
Newer Older
yang's avatar
yang committed
1
## [一、后端开发规范](id:backEndDev)
yang's avatar
yang committed
2
1. 所有的项目文件必须采用UTF-8编码,IDEA及Eclipse需要手动设置项目编码以及编译编码。 
Administrator's avatar
Administrator committed
3 4
    - Eclipse中修改项目编码的方法参考:[Eclipse修改编码方法](http://jingyan.baidu.com/article/647f0115b0c9887f2148a822.html)  
    - IDEA中修改项目编码的方法参考:[IDEA修改编码方法](http://jingyan.baidu.com/article/948f5924e4de57d80ff5f998.html])    
yang's avatar
yang committed
5

yang's avatar
yang committed
6 7 8
2. 提供他人使用的接口,原则上不允许修改**方法签名**,若是不再推荐使用,可以加**@ Deprecated**注解,同时提示新的接口名称。  
3. **DTO**类中所有的字段,不允许设置**默认值**,且DTO必须**重写toString()方法**
4. 原则上不允许使用递归,部分情况可以使用尾递归。  
yang's avatar
yang committed
9
5. 代码中不允许出现魔法值,即未定义的任何常量。错误的用法不限于以下形式:  
yang's avatar
yang committed
10
```java  
yang's avatar
yang committed
11 12 13 14
if(user.getStatus() == 5){
    // 5即为魔法值,应当避免使用
    // do something
}
yang's avatar
yang committed
15 16 17 18 19
// 推荐使用常量
private static final int EXPIRED_USER_STATUS = 5;
if(user.getStatus() == EXPIRED_USER_STATUS){
    // do something
}
yang's avatar
yang committed
20
```  
yang's avatar
yang committed
21

yang's avatar
yang committed
22
6. 在类中定义的常量、变量及方法,需要严格控制访问修饰符,提供自己使用的设为private,可以供别人使用的可以设为public、protected等。  
yang's avatar
yang committed
23
7. 所有的覆写方法,必须加**@Override**注解,防止错误的拼写导致意外。  
yang's avatar
yang committed
24
8. Long类型的数据在初始化时必须使用大写的字母L, Double类型的数据必须使用大写的字母D。常见形式如  
yang's avatar
yang committed
25 26 27 28 29 30 31 32
    - **Long time=10000L**  
    - **Double money=12.3D**  
9. 所有的数值的包装类型之间的比较不允许使用<>、==之类的简单运算符,需要使用equals方法或者compareTo方法。  
10. 所有方法的引用类型参数,若是未添加**@NotNull**注解,必须先进行null判断。  
11. 捕获异常一般不允许直接捕获基类Exception,也不可捕获异常后不进行处理。方法中也不可抛出基类Exception。  
12. 部分异常若是上层(调用层)不能解决,则不允许抛出。最外层若是出现异常必须自行处理,不可将异常信息直接展示给用户。  
13. 所有的日志信息**不允许使用System.out.println**输出,异常的日志信息使用**log.error**打印时,必须使用重载方法将捕获的异常作为第二个参数。如:  
```java
yang's avatar
yang committed
33 34 35 36 37
    try{  
        // throw some exceptions
    }catch(IOException e){  
        logger.error(e.getMessage(), e);
    }
yang's avatar
yang committed
38
```
yang's avatar
yang committed
39

yang's avatar
yang committed
40
--- ---  
yang's avatar
yang committed
41
## [二、后端命名规范](id:backEndName)
yang's avatar
yang committed
42
1. 所有的命名不允许使用**拼音或者拼音英文混合**方式,但部分公认的拼音允许使用,如**shanghai,beijing**等。  
yang's avatar
yang committed
43
2. 所有的命名不允许使用**下划线`_`**或者**美元符`$`**作为起始或者结束。错误的情况有不限于以下几种:  
Administrator's avatar
Administrator committed
44 45 46 47 48
    - **_param**
    - **$param**
    - **param_**
    - **param$**
    - **_param$**
yang's avatar
yang committed
49

yang's avatar
yang committed
50
### 包命名规范
yang's avatar
yang committed
51
1. 包名一般为域名倒序开头,后接项目名,再加上单数形式的名词(项目中一般使用模块代码),且全部为小写字母,如: 
Administrator's avatar
Administrator committed
52 53
    - 系统功能模块:**com.hand.hls.sys**  
    - 合同功能模块:**com.hand.hls.cont**  
yang's avatar
yang committed
54

yang's avatar
yang committed
55
2. 在功能模块包中一般包含如下几种形式的包:  
Administrator's avatar
Administrator committed
56 57 58 59
    - 存放SpringMVC的控制层代码: **controllers**
    - 存放该模块数据库实体对象: **dto**
    - 存放该模块的部分组件: **components**
    - 存放该模块的业务接口: **service**
yang's avatar
yang committed
60
    - 存放该模块的业务实现类: **service.impl**
Administrator's avatar
Administrator committed
61 62 63
    - 存放该模块的Mybatis数据库交互层代码: **mapper**
    - 存放该模块的工具类代码: **utils**
    - 存放自定义的异常类代码: **exception**
yang's avatar
yang committed
64

yang's avatar
yang committed
65
### 类命名规范
yang's avatar
yang committed
66
1. 一般类名采用Pascal命名法,所有单词的首字母大写,其余字母小写,单词与单词之间不使用**下划线_**分割,常见形式如:  
Administrator's avatar
Administrator committed
67 68
    - **HlsClassName**
    - **HlsNormalClass**
yang's avatar
yang committed
69

yang's avatar
yang committed
70
2. 数据库实体类一般与数据表名称相同并改为Pascal命名规则,以**DTO**结尾,如:  
Administrator's avatar
Administrator committed
71 72
    - **SysUserDTO**
    - **SysRoleDTO**
yang's avatar
yang committed
73 74

3. 抽象类命名使用**Abstract**开头,接口一般以 **I** 开头,Mybatis的mapper对象可不用 **I** 开头但必须使用**Mapper**结尾,如: 
Administrator's avatar
Administrator committed
75 76 77
    - **AbstractClass**
    - **ILog**
    - **SysUserMapper**
yang's avatar
yang committed
78 79

4. 业务逻辑层接口类使用 **I** 开头,且必须以**Service**结尾;业务的实现类在接口的基础上去掉开头的字母 **I**,最后加上**Impl**,如: 
Administrator's avatar
Administrator committed
80 81
    - **ISysUserService**
    - **SysUserServiceImpl**
yang's avatar
yang committed
82

yang's avatar
yang committed
83
5. 自定义的异常类以**Exception**结尾,如:  
Administrator's avatar
Administrator committed
84 85
    - **UserNotFoundException**
    - **UserDefineException**
yang's avatar
yang committed
86

yang's avatar
yang committed
87
6. 项目中的测试类一般以测试对象的类名开头,以**Test**结尾,如:  
Administrator's avatar
Administrator committed
88
    - **SysUserServiceImplTest**
yang's avatar
yang committed
89

yang's avatar
yang committed
90
7. 若是采用了设计模式的类,在命名时,可在最后添加设计模式的名称,如: 
Administrator's avatar
Administrator committed
91 92 93
    - 工厂模式: **LoggerFactory**
    - 代理模式: **UserProxy**
    - 适配器模式: **ArrayAdapter**
yang's avatar
yang committed
94

yang's avatar
yang committed
95
### 变量命名规范
yang's avatar
yang committed
96
1. 成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式,即**首单词**字母都小写,后面单词的**首字母大写**。如   
Administrator's avatar
Administrator committed
97 98
    + **hlsClassFieldName**  
    + **hlsLocalParamName**
yang's avatar
yang committed
99

yang's avatar
yang committed
100
2. 数据库对象的成员变量中若是变量的类型为Boolean类型,则变量名不允许使用 **is**开头,错误的命名如下:  
Administrator's avatar
Administrator committed
101
    - **private Boolean isAdmin**
yang's avatar
yang committed
102

yang's avatar
yang committed
103
### 常量命名规范
yang's avatar
yang committed
104
1. 常量的命名一般所有单词都**大写**,各个单词之间使用下划线`_`分隔,如:  
Administrator's avatar
Administrator committed
105 106
    - **PI**
    - **PROJECT_PATH**
yang's avatar
yang committed
107 108

2. 常量的命名尽量使用单词表达出常量的用途及含义,力求语义清晰,不用担心名字太长,如: 
Administrator's avatar
Administrator committed
109 110
    - 周期的第一天:**FIRST_DAY_OF_CYCLE**
    - 用户允许的最大错误次数:**USER_ALLOWED_MAX_ERROR_COUNT**
yang's avatar
yang committed
111

yang's avatar
yang committed
112
### 方法命名规范
yang's avatar
yang committed
113
1. 方法的命名规则采用lowerCamelCase风格,方法名的首单词字母全部小写,其余单词首字母大写,如:  
Administrator's avatar
Administrator committed
114 115
    - **walkMyWay()**
    - **doSomething()**
yang's avatar
yang committed
116

yang's avatar
yang committed
117
2. 对数据库进行查询的方法,一般以**select、find、query**开头,后面接查询的对象,若是查询结果为List集合,对象名可变为复数,如:  
Administrator's avatar
Administrator committed
118 119
    - `public SysUser selectSysUser()`
    - `public List<SysRole> findSysRoles()`
yang's avatar
yang committed
120

yang's avatar
yang committed
121
3. 对数据进行数据插入的方法,一般以**insert**开头,后接插入的对象,若是允许批量插入对象,对象名可变为复数,如:  
Administrator's avatar
Administrator committed
122 123
    - `public int insertSysUser(SysUser user)`
    - `public int insertSysRoles(List<SysRole> roles)`
yang's avatar
yang committed
124

yang's avatar
yang committed
125
4. 对数据库进行数据删除的方法,一般以**delete**开头,后接插入的对象,若是允许批量插入对象,对象名可变为复数,如:  
Administrator's avatar
Administrator committed
126 127
    - `public int deleteSysUser(SysUser user)`
    - `public int deleteSysRoleByIds(List<Long> roleIds)`
yang's avatar
yang committed
128 129

5. 对数据库进行数据更新的方法,一般以**update**开头,后接插入的对象,若是允许批量插入对象,对象名可变为复数,如:
Administrator's avatar
Administrator committed
130
    - `public SysRole updateSysRole(SysRole role)`
yang's avatar
yang committed
131
    - `public int updateSysUsers(List<SysUser> users)`
yang's avatar
yang committed
132

yang's avatar
yang committed
133
--- ---
yang's avatar
yang committed
134

yang's avatar
yang committed
135
## [三、前端开发规范](id:frontEndDev)
yang's avatar
yang committed
136
#### 目录划分
yang's avatar
yang committed
137

yang's avatar
yang committed
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
按照web目录规范,前端文件存放在如下目录
```
  webapp
    ├─lib
    │  ├─bootstrap-3.3.7
    │  ├─font-awesome-4.6.3
    │  └─kendoui
    ├─resources
    │  ├─css
    │  ├─font
    │  ├─images
    │  ├─js
    │  ├─upload
    └─WEB-INF
        ├─web.xml
        └─view

```
资源文件目录
资源文件按照类型划分为两个目录:**`lib`****`resources`**

 - **`lib`**目录存放kendoui的所有文件
 - **`resources`**目录存放程序通用的资源文件

功能文件目录
功能文件存放在**`view`**目录下,目录的命名规则按照
> **[模块代码]**/**[功能项代码]**

例如:用户管理的功能代码是SYS001,那么用户管理相关的界面文件都存放在
```
src/main/webapp/WEB-INF/view/sys/sys001/
```
yang's avatar
yang committed
170 171

--- ---
yang's avatar
yang committed
172
## [四、前端命名规范](id:frontEndName)
yang's avatar
yang committed
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
#### 文件命名约定
界面文件按照如下格式:
>[模块代码]<u> </u>[业务对象]<u> </u>[功能操作].html

例如:用户查询界面: sys_user_query.html
#### url命名约定
对于系统中提交的url地址,按照以下格式命名
>[contextPath]/[模块代码]/[业务对象]/[操作类型]

对于常见的几种操作类型定义如下

查询URL
>[模块代码]/[业务对象]/query

批量提交  
>[模块代码]/[业务对象]/submit

批量删除
> [模块代码]/[业务对象]/remove

例如用户的查询: sys/user/query


#### 脚本变量
变量命名原则是减少变量冲突,采用Camel命名法。
>var [开发项ID]_[具体业务含义] = {}

例如:用户管理界面中用户查询的grid数据
>var d_um_002_grid = $('#d_um_002_grid').data("kendoGrid");

#### 脚本函数名
函数命名也采用Camel命名法.
>function [开发项ID]_[具体业务含义](){...}

例如用户查询函数
```javascript
function d_um_002_query(){
    ....
}