4、关于代码规范
代码规范对程序员的重要性:
1、在软件开发生命周期中,有80%的时间是用在维护上
2、几乎所有的软件维护者都不是创使人
3、迭代式开发,必须要有清晰、可读性强的代码,以便于快速迭代
4、敏捷开发时,对应文档的输出不是减少,而是更加实用,因此,可交付的易读的代码更为重要了
5、协同协同,必需确保在编码时遵循统一的规范
编码规范是必需的,每个参与人必需严格遵循该规范进行编码。
4.1、命名规范
基本原则:
1、采用英文全称进行命名
2、保持各层级名称基本统一
3、命名英文单词用全称,避免用简称
4.1.1、模块命名规范
作用:对于系统子模块进行命名,从而区分各子模块的含义。
要求:子模块名称采用子模块的英文简写,一般如果名称由多个英文单词组成时,采用首字母组合;如果由单个英文单词组成时,取该该单词的简写。
职责:产品经理负责进行命名
模块命名表:
序号 | 简称 | 全称 | 中文 |
1 | SYS | System | 系统管理 |
2 | BASE | Base Data | 基础数据 |
3 | PPM | Project Plan Manger | 项目计划管理 |
4 | |||
5 |
4.1.2、数据库命名规范
数据库对象包括(表,视图,存储过程,函数等),应遵守下面命名规则,其中(AAA是模块简称,例如: SYS、BASE、PPM等等)
对象类型 | 格式 | 说明 | 备注 |
Table | AAA_DDDDD_T | AAA = 模块简称 DDDDD = 表对象 T = Table的简写 | 1、表名不超过32个英文字符 2、DDDDD为表名称,采用英文单词,多个英文单词时,用下划线隔开 3、例如:SYS_USER_ROLE_T |
View | AAA_DDDDDD_V | AAA = 模块简称 DDDDD = 视图对象 V = View的简写 | 1、视图名不超过32个英文字符 2、DDDDD为视图名称,采用英文单词,多个英文单词时,用下划线隔开 3、例如:SYS_MENU_V |
Sequence | AAA_DDDDDD_S | AAA_DDDDD = 表对象 S = Sequence的简写 | 1、AAA_DDDDD同表对象 2、例如:SYS_MENU_S |
Procedure | AAA_DDDDD_PRC | AAA = 模块简称 DDDDD = 存储过程方法名 PRC = Procedure的简写 | 1、表名不超过32个英文字符 2、DDDDD为存储过程方法名,采用英文单词,多个英文单词时,用下划线隔开 3、例如:AP_VENDOR_PRC |
Function | AAA_DDDDD_FUN | AAA = 模块简称 DDDDD = 函数方法名 FUN = Function的简写 | 1、表名不超过32个英文字符 2、DDDDD为函数方法名,采用英文单词,多个英文单词时,用下划线隔开 3、例如:AP_VENDOR_FUN |
Package | AAA_DDDDD_PKG | AAA = 模块简称 DDDDD = 包名称 PKG = Package的简写 | 1、表名不超过32个英文字符 |
4.1.3、程序文件命名规范
1、文件扩展名:
文件类型 | 扩展名 |
Java source | .java |
Java bytecode | .class |
Java archive | .jar |
WAR file | .war |
EAR file | .ear |
XML Document | .xml |
Property file | .properties |
Java Server Page | .jsp |
HTML Page | .html |
Java Script | .js |
CSS | .css |
2、JAVA文件命名
文件属性 | 扩展名 | 格式 | 说明 |
VO | .java | DddddVO | Ddddd:表示业务对象,一般与表对象保持一致,类名称首字母大写,后面采用驼峰状命名 VO:表示该对象为VO对象 |
DAO Interface | .java | IDddddDao | I:Interface简写 Ddddd:表示业务对象,一般与表对象保持一致,类名称首字母大写,后面采用驼峰状命名 Dao:表示该接口为Dao接口 |
DAO Implement | .java | DddddDaoImpl | Ddddd:表示业务对象,一般与表对象保持一致,类名称首字母大写,后面采用驼峰状命名 Dao:表示该对象为Dao层对象 Impl:表示该对象是一个实现类 |
Service Interface | .java | IDddddService | I:Interface简写 Ddddd:表示业务对象,一般与表对象保持一致,类名称首字母大写,后面采用驼峰状命名 Dao:表示该接口为Service层接口 |
Service Implement | .java | DddddServiceImpl | Ddddd:表示业务对象,一般与表对象保持一致,类名称首字母大写,后面采用驼峰状命名 Dao:表示该对象为Service层对象 Impl:表示该对象是一个实现类 |
Controller | .java | DddddController | Ddddd:表示业务对象,一般与表对象保持一致,类名称首字母大写,后面采用驼峰状命名 Controller:表示该对象是一个UI类 |
JSP | .jsp | ddddd_xxxx | Ddddd:表示业务对象,一般与表对象保持一致,文件名称首字母小写,后面采用驼峰状命名 xxxx:表示该页面属于那种类型操作页面,一般为(edit、detail、report等,分别表示:编辑表单、明细查看、报表页面等) |
JS | .js | ddddd_xxxx | 一般与JSP页面一一对应 |
4.1.4、JAVA类及属性、方法命名规范
1、常量或枚举命名:采用有业务意义的单词组成;英文单词为全字母大写;多个英文单词用下划线分开;
2、属性命名:采用有业务意义的英文单词组成,一般为名词;VO属性与数据库字段保持一致;首字母小写;多个英文单词采用驼峰状进行命名;
3、方法命名:采用具体方法的英文单词,一般形式为动词,或动词 + 名词格式;首字母小写;多个英文单词采用驼峰状进行命名;常用的动词:set、get、create、add、modify、update、delete、remove、select、save等
4、变量命名:主要指程序块中应用到的变量。变量命名是避免采用无意义的i、str等命名规则,尽量采用的规则是与被定义的类型一致的业务对象名称。如:List<User> userList、Array<User> userArray等方式。
5、Controller RequestMapping命名:格式:/相对路径/模块简称/contraller类名称(不包含contraller单词)/方法名称。
4.1.5、HTML、JavaScript、CSS命名规范
1、HTML中标签和控件的命名规则:采用与业务对象一致的英文单词,一般格式为控件类型简写 + 业务对象名称;所以字母采用小写;多个单词采用驼峰装进行命名;
控件 | 简写 | 中文 |
easyui-panel | pnl | 面板 |
easyui-tabs | tab | 选项卡 |
easyui-accordion | acc | 分类 |
easyui-layout | lyt | 布局 |
easyui-menu | mnu | 菜单 |
easyui-menubutton | mbtn | 菜单按钮 |
easyui-splitbutton | spl | 分割按钮 |
form | frm | 表单 |
easyui-window | win | 窗体 |
easyui-dialog | dlg | 对话框 |
easyui-datagrid | dgd | 数据表格 |
easyui-propertygrid | pgd | 属性表格 |
easyui-tree | tree | 树 |
easyui-treegrid | tgd | 树形表格 |
portal | ptl | 门户 |
说明:form中的控件如textbox、combobox等,可以直接采用与业务对象属性一致的名称;具体命名办法参考:4.1.4中的属性命名。
2、Javascript的命名规则
Javascript类命名:一般与文件名称一样;针对与页面匹配的Javascript的类命名规则:文件名称+下划线+page(如:project_edit.jsp页面对应的JS文件名称为project_edit.js,那么该js的类名称为:project_edit_page)。
javascript全局属性命名:由于该JS对象属于页面的附属对象,因此为了避免属性与页面属性出现冲突或歧义,JS中定义的属性前必须加“p_”。具体定义的属性命名规则采用有业务意义的英文单词;多个英文单词采用下划线隔开;英文单词全部采用小写;
javascript事件方法命名:事件对象(不包含控件简称部分) + 下划线 + 事件名称(一般有:change、click、dblclick、focus、keydown、keypress、keyup、load、mousedown、mousemove、mouseout、mouseover、mouseup、reset、resize、select、submit、unload)。
javascript一般方法命名:采用具体方法的英文单词,一般形式为动词,或动词 + 名词格式;所有字母小写,多个英文单词采用下划线隔开;常用的动词:set、get、create、add、modify、update、delete、remove、select、save等
3、CSS命名规则:采用全部小写方式;由于属于自定义的CSS,因此最好增加jasmp,表示属于jasmp平台自定义的;多个单词采用减号隔开;
4.2、程序注释
4.2.1、类注释
1、目的:主要标注该类的作用,对类进行简单描述;记录类的作者和类的创建日期
2、格式:
/**
* @ClassName: ${type_name}
* @Description: ${todo}(这里用一句话描述这个类的作用)
* @author 作者姓名
* @date ${date} ${time}
*
* ${tags}
*/
4.2.2、属性注释
1、目的:描述该属性的意义;对于属性有特殊含义的需要进行特别书面
2、格式:
/**
* @Fields ${field} : ${todo}(用一句话描述这个变量表示什么)
*/
4.2.3、方法注释
1、目的:描述该方法的主要意义;对方法的参数进行说明
2、格式:
/**
* @Title: ${enclosing_method}
* @Description: ${todo}(这里用一句话描述这个方法的作用)
* @param ${tags} 设定文件
* @return ${return_type} 返回类型
* @throws
*/
4.2.5、代码段注释
1、目的:行注释是一个非常短的注释,对当前代码片段进行解释说;行尾注释写在该代码块的上面;
2、格式:
// 用一句话描述下面代码具体的功效
4.3、代码其他要求
4.3.1、代码格式
1、缩进:Tab键的标准占用字符为4个空格字符
2、行长度:每行代码最多80个字符
3、换行规则:当一行或者一个表达式无法在一行内完成,则应该按照如下规则进行换行处理
1)在逗号后换行
2)运算符后换行
3)换行后尽量使表达式排列整齐
4)代码换行后,按照下一行比上一行多4个空字符进行缩进
4、定义与声明:
每个声明语句各成一行,如有特殊用途的可在后面加行尾注释
正确示例:
int level; // indentation level
int size; // size of table
错误示例:
int level, size;
5、定义位置:声明变量是应注意位置,至少是在一块代码的开始处(一块代码指的是用”{”和”}”包含的代码块)。不要在使用时才去声明边量,他很容易让人产生混乱,不小心还会引发错误。
6、方法长度:一个方法代码行数保持在50行以内,超过50行的方法可以拆分成多个方法实现。(备注,代码行数指的是代码语句行数,不是编辑器行数)
7、类方法数:一个类中方法数量保持在20个方法以内,超过20个应考虑拆分成多个类进行实现。