无规矩不成方圆—-2013Y
编码规范对于程序员个人和公司而言尤为重要,有以下几个原因:
1.养成个人良好的开发习惯;
2.统一规范,降低团队成员之间沟通成本,提高工作效率;
3.利于代码维护:一个软件的生命周期中,80%的花费在于维护;特别,几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护;.编码规范可以改善软件的可读性,可以让新成员尽快而彻底地理解代码;
为此,特制定如下相关开发规范:
1.服务端开发规范
2.客户端IOS开发规范
3.客户端Android开发规范
4.前端设计&WEB开发规范
可能有些条目不合理或不符合你以往的习惯,欢迎,鼓励每位积极反馈,把你认为好的东西分享出来,以供大家讨论,不断完善此规范。
每个类、页面、JS脚本、方法都必须有详细注释。要求写出模块的名称、功能、方法参数介绍、创建者、创建修改时间。
1>所有的源文件都应该在开头有一个注释,其中列出版本信息、日期、类描述和创建者,其格式如下:
类签名:
/**
*
* @author : Ares.yi
* @createTime : 2014-11-10 上午11:13:42
* @version : 1.0
* @description :
*
* */
方法签名:
/**
* ${tags}
*
* @author : Ares.yi
* @createTime : ${date} ${time}
*/
Eclipse或MyEclipse工具设置类和方法的签名流程如下图:
2>变量、方法生明顺序:
& | 各部分 | 说明 |
---|---|---|
1 | 类/接口文档注释(/*……/) | 该注释中所需包含的信息,参见第一条 |
2 | 类或接口的声明 | 该注释中所需包含的信息,参见第一条 |
3 | 类/接口实现的注释(/……/)如果有必要的话 | 该注释应包含任何有关整个类或接口的信息,而这些信息又不适合作为类/接口文档注释 |
4 | 类(静态)变量 | 首先是类的公共变量,随后是保护变量,再后是包一级别的变量(没有访问修饰符),最后是私有变量 |
5 | 实例变量 | 首先是公共级别的,随后是保护级别的,再后是包一级别的(没有访问修饰符),最后是私有级别的 |
6 | 构造器 | – |
7 | 方法 | 这些方法应该按功能,而非作用域或访问权限,分组 |
3>缩进、换行排版:
4个空格常被作为缩进排版的一个单位;尽量避免一行的长度超过80个字符;当一个表达式无法容纳在一行内时,应该换行(新的一行应该与上一行同一级别表达式的开头处对齐)
4>注释:
单行注释、多行块注释(/**……*/)方便生成javadoc
5>声明:
a.在方法名与其参数列表之前的左括号“(”间不要有空格;
b.左大括号"{"位于声明语句同行的末尾;
c.右大括号"}"另起一行,且与相应的声明语句对齐,除非是一个空语句,“}”应紧跟在“{”之后;
d.方法与方法之间以空行分隔;
e.if语句语句总是用"{"和"}"括起来,无论单行还是多行,避免使用如下容易引起错误的格式:
if(condition)//注意尽量避免使用此格式!
statement;
应该使用的格式:
if(condition){//尽量使用此格式!
statement;
}
6>命名规范:
a.包名,前缀以com开头。包名的后续部分接下来以公司简拼+项目简拼+分层模块功能模块名称命名,所有字母必须小写命名,如:
com.company.product.services.user
com.company.product.services.user.impl
com.company.product.dao.user
com.company.product.dao.user.impl
com.company.product.dao.user.bean
b.类/接口,采用大驼峰式命名法,即首字母大写,其后单词的首字母大写(避免缩写词(除非该缩写词被更广泛使用)),如:
UserInfoDao
UserInfoDaoImpl
UserServices
UserServicesImpl
c.方法,命名原则方法命名,采用小驼峰式命名法,即首字母小写,其后单词的首字母大写。
d.变量,采用小驼峰式命名法,除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。
e.常量,常量的声明,应该全部大写,单词间用下划线隔开。
7>其他:
a.代码中应该删除导入的多余类,删除无引用的变量,避免编译警号出现,必要时请使用@SuppressWarnings注解;
b.实现接口或超类的方法,方法注释应该在接口或超类中书写,重写方法应该添加@Override注解;
c.过期不推荐使用的类或方法,请使用@Deprecated标明;
d.暂未实现,准备后续实现,请添加//TODO或//FIXME标注;
e.修改代码时,添加修改原因,修改时间、修改人,如:
1>数据库库名:
9XXX_模块,如:
9XXX(系统总库)
9XXX_user(用户中心库)
9XXX__message(私信库)
2>数据库表:
a.业务表——模块_功能或用户,如:
user_info(用户基本信息表)
user_sdr(用户供需聘表)
user_education(用户教育经历表)
b.报表——reports_模块_month/week,如:
reports_message_supper(超级私信统计报表)
(所有建表必须有comment说明此表用处)
3>数据库表列:
a.列名的英文含义,小驼峰式命名法(不要使用_),尽量避免使用数据库关键字;
b.每个字段必有有comment说明;
c.状态位字段comment说明要详细,格式如字段“delStatus”——删除标记(0:正常;-1:已删除)
4>注意使用存储引擎的不同,表必须有功能说明,每列必须有功能comment注释,所有字段都非空,整体示例如下:
CREATE TABLE `product_favorite` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`uid` INT(11) NOT NULL DEFAULT '0' COMMENT '用户UID',
`productId` INT(11) NOT NULL DEFAULT '0' COMMENT '产品ID',
`productName` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '产品名',
`pic` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '产品图片',
`industryUnionCode` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '行业联合编码',
`businessModel` SMALLINT(3) NOT NULL DEFAULT '0' COMMENT '经营模式',
`salesArea` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '销售区域',
`price` DECIMAL(11,2) NOT NULL DEFAULT '0.00' COMMENT '单价',
`supportUnit` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '供货单位',
`createTime` DECIMAL(16,0) NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uid_proId` (`uid`,`productId`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='产品收藏';