【规范】alibaba编码规范阅读
一、编程规范
(一)命名规范
1、代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束
2、代码中的命名严禁使用评语与英文混合的方式,更不允许直接使用中文的方式
3、类名使用UpperCamelCase风格,必须遵从驼峰形式,但是:DO BO DTO VO AO除外
4、方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰格式
5、常量名全部大写,单词间用下划线隔开,力求词义表达清楚,不要嫌名字长
6、抽象类命名使用Abstract或Base开头:异常类命名使用Exception结尾:测试类命名以它要测试的类的名称开始,以Test结尾。
7、中括号是数组类型的一部分,使用String[] args 不要使用String args[]的方式
8、POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。
定义基本类型Boolean isDeleted的属性,它的方法也是isDeleted(),RPC框架在反向解析的时候,以为对应的属性名称是deleted,导致属性获取不到,进而抛出异常。
9、包名统一使用小写,点分隔符有且仅有一个自然语义的英文单词,包名统一使用单数形式。但是类名如果有复数含义,类名可以使用复数形式。
10、杜绝完全不规范的缩写,避免望文生义。
11、为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达词义 eg:PullCodeFromRemoteRepository
12、如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式eg:public class OrderFactory ; public calss LoginProxy ; public class ResourceObserver
13、接口类中的方法和属性不要加任何修饰符号,保持代码的简洁性,并加上有效的javadoc注释。尽量不要在接口中定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。
14、接口和实现类的命名有两套规则
①、对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类是用Impl的后缀和接口区别
②、如果是形容能力的接口名称,取对应的额形容词做接口名(通常是-able的形式)
15、枚举类名建议加上Enum后缀,枚举成员名称需要大写
16、各层命名规范
Service/DAO层方法用get做前缀
- 获得单个对象的方法用get做前缀
- 获得多个对象的方法用list做前缀
- 获取统计值的的方法用count做前缀
- 插入的方法用save/insert做前缀
- 删除的方法用remove/delete做前缀
- 修改的方法用update做前缀
领域模型命名规约
- 数据对象:xxxDO xxx为数据表名
- 数据传输对象:xxxDTO xxx为业务领域相关的名称
- 展示对象:xxxVO xxx一般为网页名称
- POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO
(二)常量定义
1、不允许任何魔法值(即未经定义的常量)直接出现在代码中
2、long或Long初始赋值时,使用大写的L,不能是小写的l,小写l容易跟数字1混淆,造成误解
3、不要使用一个常量类维护多有常量,按常量的功能进行分类,分开维护
4、常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
- 跨应用共享常量:防止在二方库中,通常是client.jar中额的constant目录下
- 应用neural共享常量:放置在一方库中,通常是modules中的constant目录下
- 子工程内部共享变量:即在当前自工程的constant目录下
- 包内共享常量,即在当前包下单独的constant目录下
- 类内共享常量:直接在类内部private static final定义
5、如果变量值仅在一个范围内变化。且带有名称之外的额延伸属性,定义为枚举类。
(三)代码格式
1、大括号的使用约定,如果是大括号内为空,则简洁的写成{}即可,不需要换行;如果是非空代码块则:左大括号前不换行 左大括号后换行 右大括号前换行 右大括号后还有else等代码则不换行:表示终止的大括号后必须换行。
2、左小括号和字符之间不出现空格:同样,右小括号和字符之间也不出现空格
3、if/for/while/switch/do等保留字与括号之间都必须加空格
4、任何二目、三目运算符的左右两边都要加空格
5、采用4个空格缩进,禁止使用tab字符
6、注释的双斜线与注释的内容之间有且仅有一个空格
7、单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则
- 第二行相对第一行缩进4个空格,从第三行开始,不再继续缩进
- 运算符与下文一起换行
- 方法调用的点符号与下文一起换行
- 方法调用时,多个参数,需要换行时,在逗号后进行
- 在括号前不要换行
8、方法参数在定义和传入时,多个参数逗号后边必须加空格
9、IDE的text file encoding设置为UTF-8;IDE中文间的换行符使用Unix格式,不要使用Windows格式
10、没有必要增加若干空格来使某一行字符与上一行对应设置的字符对其
11、方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同放入语义直接插入一个空行,相同业务逻辑和语义之间不需要插入空行。
【规范】alibaba编码规范阅读的更多相关文章
- 第四章 android 命名规范和编码规范
书里面讲的比较常见,单个人也是有不同的观点: 因为android绝大部分使用java开发的,因此java相关规范适用于android: Google Style: 英文地址:http://google ...
- [旧][Android] 命名规范和编码规范
备注 原发表于2016.05.07,资料已过时,仅作备份,谨慎参考 前言 本文适用范围:已参加项目开发的人 写这篇文章的目的是为方便地对代码进行管理,让整个团队的代码规范化.这里的部分规定可能和你在其 ...
- web项目开发 之 前端规范 --- HTML编码规范
此文严格按照W3C规范和部分实际项目可读性,浏览器加载,性能等众多属性权衡,做出平时前端编码规范文 档.供广大web工作者参考并实施,对维护和项目扩展升级都能省时省力. 转载请注明出处,JS前端实用开 ...
- Android 命名规范和编码规范
简明概要 多写注释 一.关于命名规范 对于开发项目来说肯定是要有统一的规范,然而命名规范需要做到哪几点呢? 答: 首先,不能反人类. 再来就是,要望文而知其意. 下面就来说说具体该怎么去规范我们的代 ...
- 《从零开始学Swift》学习笔记(Day 56)——命名规范Swift编码规范之命名规范
原创文章,欢迎转载.转载请注明:关东升的博客 程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要. 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量, ...
- 前端编码规范(2)—— HTML 规范
HTML 规范 文档类型 推荐使用 HTML5 的文档类型申明: <!DOCTYPE html>. (建议使用 text/html 格式的 HTML.避免使用 XHTML.XHTML 以及 ...
- 前端编码规范(4)—— CSS 和 Sass (SCSS) 规范
CSS and Sass (SCSS) style rules ID and class naming ID和class(类)名总是使用可以反应元素目的和用途的名称,或其他通用名称.代替表象和晦涩难懂 ...
- 标准的Java编码规范手册
编码规范体现出一个开发者的基本素质,良好的编码规范可以提高团队编码的效率,避免很多不必要的问题.今天分享一个标准的Java编码规范给大家,希望对于大家今后的开发工作带来帮助. 编码规范的意义 ...
- 建立标准编码规则(四)-C#编码规范分类及实现
1 现实中的问题 在任何一个公司,每个程序员编写的习惯可能都是不一样的,大到命名空间,小到变量的名字.甚至,我们去github,里面的大牛每个开源的项目的命名规则可能都不一样. 我们通常会遇到下面的问 ...
随机推荐
- (转)Android分布式编译学习(一)distcc实现分布式编译 —— Ubuntu12.04上部署distcc分布式编译
转自:http://blog.csdn.net/eqiang8271/article/details/17144411 版权声明:本文为博主原创文章,未经博主允许不得转载. Android代码庞大 ...
- [原创]Allegro 导入DXF文件,保留布好的线路信息
最近智能钥匙产品开发过程中,由于结构装配尺寸的偏差,需要对电路PCB外框OUTLINE进行缩小调整,并且USB插座定位孔改变. Allegro软件在线性绘制方面是有严重缺陷的,想绘制一个异形的板框比较 ...
- php中的func_num_args、func_get_arg与func_get_args函数
From: http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/21/2183157.html php的的func_num_args.f ...
- Jenkins+Github配置【转】
一.GitHub上配置 前提:Jenkins能正常打开 将本地文件上传到GitHub上:进入终端 cd Documents cd project git clone https://github.co ...
- 编译libjpeg
本来以为编译libjpeg很容易,结果弄了半天. 先百度了下看下教程,一般是设置path,这里我也做了 我的电脑 -> 属性 -> 高级 -> 环境变量 ,添加环境变量PAT ...
- 基于redis集群实现的分布式锁,可用于秒杀,定时器。
在分布式系统中,经常会出现需要竞争同一资源的情况,使用redis可以实现分布式锁. 前提:redis集群已经整合项目,并且可以直接注入JedisCluster使用: @Autowired privat ...
- 正则表达式sed
sed 能实现grep查找的功能,还可以替换指定的字符. 匹配查找文件中root字符(其中的 -n表示段落,p表示打印出来print) [root@localhost sed]# sed -n '/ ...
- 第一篇 一步一步看透C++
毕业快一年半了,这些时候,都是在底层方面做的一些工作,虽然内核的C也实现了C++中的一些抽象机制,面向对象,继承,多态,封装等等,但是,想着大学里面,电子类的学习,都是偏向底层的,有过C++的 ...
- 内存管理 初始化(六)vmalloc_init 及 ioremap
是不是我错了,本想这个函数会如网上所说将进行非连续内存管理的初始化,但是对于2.6.34的ARM架构而言,该函数实际完成的业务非常少. 内存管理的初始化读到此处,我感觉原有的认识存在很大缺陷: (1) ...
- Android开发学习笔记-SharedPreferences的用法
SharedPreferences介绍: 做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等 ...