开发部项目编码规范说明
1. 格式与命名规范(Formating and Naming Conventions)
1.1 缩进
使用Tab缩进,而不是空格健
1.2 换行
单行字符不超过100字符,超出部分换行。
If 、for、while语句只有单句时,也需要用“{”和“}”括起来
1.3 命名规则
1、 尽量使用完整的英文描述符
2、 采用适用于相关领域的术语
3、 采用大小写混合使名字可读
4、 尽量少用缩写,确有需要的,要能表达其意义或采用前四个字母方式,且在整个工程中统一
5、 避免使用类似的名字,或者仅仅是大小写不同的名字
6、 命名时避免使用下划线(静态常量除外)
具体举例如下:
包(package):采用完整的英文描述符,应该都是由小写字母组成。如:com.zqgame.项目名称.逻辑层名
类(class):采用完整的英文描述符,所有单词的第一个字母大写。
实体类(entityclass):实体对象的全称
抽象类(abstractclass):以“Abstract”作为抽象类的开头。如:AbstractBeanFactory
测试类(testclass): 以“Test”做为类命名的结尾。如:ContainerTest
异常类(exceptionclass):以“Exception”做为类命名的结尾
控制器(controller): 以“Controller”结尾。如:UsersController
变量 :采用驼峰命名法。如:firstName
设置/获取成员变量:被访问字段名的前面加上前缀get/set。如:setFirstName()/getFirstName()
静态常量(static final):全部采用大写字母,单词之间用下划线分隔,例如:DEFAULT_DATE
循环计数器:通常采用字母i,j,k
页面控件命名示例:okBtn、nameLbl,其中btn、lbl缩写代表按钮(Button)、标签(Label)
遇到缩写如XML时,仅首字母大写,即loadXmlDocument()而不是loadXMLDocument()
页面请求:
功能描述 | HTTP Verb | Path | Controller | JSP/HTML/JS |
各功能主页 | GET | /photos | index | index |
导航到新建页 | GET | /photos/new | new | new |
新建 | POST | /photos | create | —— |
导航到详细页 | GET | /photos/{id} | show | show |
导航到修改页 | GET | /photos/{id}/edit | edit | edit |
修改 | PUT | /photos/{id} | update | —— |
删除 | DELETE | /photos/{id} | destroy | —— |
Ajax分页查询 | POST | /photos/page | page / query***Page | —— |
Ajax不分页查询 | POST | /photos/list | list / get***List | —— |
1.4 声明
修饰符应该按照如下顺序排列:public -> protected-> private -> abstract -> static -> final -> transient ->volatile -> synchronized -> native
1.5 类与接口的声明顺序
静态成员变量(static fields)à
静态初始化块(static initializers)à
成员变量(fields)à
初始化块(initializers)à
构造器(constructors)—>
静态成员方法(static methods)à
成员方法(methods)à
重载自object的方法如toString()、hashCode()和main方法à
类型(内部类/inner classes)
同等的类型,按publicàprotectedàprivate的顺序排列
2. 注释规范(Document Convertions)
良好的代码注释习惯对于团队每个成员来说,是其易于解读的关键。也就是说,如果另一个编程人员从未见过这段代码,要在合理的时间内理解代码,需要知道哪些信息。并以此作为注释的依据。因此对于注释来讲,需要注意以下几点:
1)、注释应该增加代码的清晰度
2)、保持注释的简洁
3)、在写代码之前写注释
4)、注释出为什么做了一些事,而不仅仅是做了什么
对于JavaDoc文档注释则使用“/**…….*/”,JavaDoc注释可以通过工具转换成HTML工具。注释可以模板生成。
2.1 文件注释
在每个代码文件的头部加入类似下面的文件注释,文件注释采用块注释。
*
* 创建人:张三
*创建时间:2011/11/03
*功能描述:仓储公共接口
* 版本:1.0
* 版权拥有:------------------------------------
*
*=====================================================
* 修改记录
*=====================================================
*序号 姓名 日期 版本 简单描述
*=====================================================
* 1 李四 2011-11-04 1.01 因为某某原因而修改了某些功能
* 2 王五 2011-11-14 1.02 因为某某原因而修改了某些功能
*
*/
2.2 方法注释
方法注释采用块注释。
/**
*
* 方法功能描述
* @param 参数的描述
* @return 返回类型的描述
* @exception 出错信息的描述
* @author 方法的创建者
* @date 方法的创建时间
*/
2.3 单行注释
短注释可以显示在一行以内,并与其后的代码具有一样的缩进层级。如果一个注释不能在一行内写完,就该
采用块注释,单行注释之前应该有一个空行。如:
if (condition){
/*………………………….*/
Something…
}
2.4 行末注释
对于比较重要的变量加以注释,说明变量的含义。
int size; // Java
3. 日志打印格式
日志打印原则
1) INFO配置信息
2) INFO重要,比如订单信息,统计性信息
3) ERROR 错误日志
4) WARN 检查配置,系统环境有问题
5) FATAL,系统退出
6) 分文件login_error,pay_error,xxx_error.log
7) 第三方接口调用,请求参数和返回参数详细记录,
格式:
操作名称 [结果] [***请求参数***] [***返回参数***] 各参数中间用逗号分隔
例:
INFO:game,200,5851607264418342251,3368035691,43002,宠物零食,1,1,0,17034357,MJ丶演绎星辰,OnUseItemEvent_43002
INFO:game,200,5851642123275486121,4270605225,43002,宠物零食,1,1,1,17034357,MJ丶演绎星辰,商店购买
4. 开发注意事项
4.1 代码布局
编写类、接口或方法的进候,应遵守以下格式规则:
Class Sampleextends Object { //左大括号“(”位于声明语句同行的末尾
int ivar1;
int ivar2;
Sample(int i,int j) { //方法名与其参数列表之间的左括号“(”不要有空格
this.ivar1 = i;
this.ivar2 = j;
void emptyMethod() {} //除非是一个空语句,“}”紧跟在“{”之后
} // 右大括号“}”另起一行,与相应的声明语句来对齐,
4.2 代码重构的心态
时时都要在想着自已的代码是不是最优的,是否还有重构的可能性,如何重构,参考《重构---改善既有代码代码的设计》
4.3 第三方包管理
每个工程都要建立一份《第三方包/库列表》,该列表中包括有包/库的版本以及功能说明,开发过程中成员
如果需要引用到第三方包或DLL库,首先查看《第三方包/库列表》文档,是否存在有记录。如果文档中没
有,需要该文档中登记后再使用。包的版应指定一个专人来管理维护。
4.4 类的维护
类的原开发者写可以新增、修改、删除该类的方法,其他团队成员在开发中出现的新的需求功能需求,需要在某个类中添加或修改,需联系该类的开发者维护。这样可以保证代码的准确性。不要随便修改他人的代码。
4.5 SVN维护
开发中的代码是以服务器上(现在是192.168.70.200)的为准,每天必须要上传编译通过的代码,多提交SVN,勤提交SVN,但不能提交有问题的代码。代码提交要及时、准确。如果有依赖关系的代码,在代码提交后要告知小组相关的开发成员,以便他们能及时获取最新代码。
jdbc.maxPoolSize=50
jdbc.minPoolSize=2
jdbc.initialPoolSize=3
jdbc.acquireIncrement=5
jdbc.maxStatements=0
jdbc.maxStatementsPerConnection=100
jdbc.maxIdleTime=300
jdbc.checkoutTimeout=20000
--返回由备份集内包含的数据库和日志文件列表组成的结果集。
--主要获得逻辑文件名
USE master
RESTORE FILELISTONLY
FROM DISK = 'g:\back.Bak'
Go
************************************************
/*
利用bak恢复数据库,强制还原(REPLACE)
STATS = 10 每完成10%显示一条记录
DBTest和DBTest_log是上面g:\back.Bak里的逻辑文件
*/
USE master
RESTORE DATABASE DB
FROM DISK = 'g:\back.Bak'
WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB.mdf',
MOVE 'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB_log.ldf',
STATS = 10, REPLACE
GO
++++++++++++++++++++++++++++++++
/*
备份数据DB 到.bak文件。然后利用此bak文件恢复一个新的数据库DBTest。
*/
USE master
BACKUP DATABASE DB
TO DISK = 'g:\DBBack0930.bak'
RESTORE FILELISTONLY
FROM DISK = 'g:\DBBack0930.bak'
RESTORE DATABASE DBTest
FROM DISK = 'g:\DBBack0930.bak'
WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest.mdf',
MOVE 'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest_log.ldf'
GO
---******************************
http://yiliu.web-176.com/index.html