ourslook JAVA开发规范 (代码规范)(aliyun)

好记星不如烂笔头,这里记录平时工作中用到的东西,不喜可以留言。

准守阿里巴巴代码规范
开发规范

开发规范,明令禁止

  1. 禁止在for循环里面写查询语句,数据稍微多一点就稍微卡死了;
  2. 禁止写重复代码;重复代码包含两个含义,第一,系统已有的功能,不要重复开发,可以进行完善; 第二:业务代码,不允许有随意粘贴复制到多处的问题,这种会导致后期维护的人累到,脑袋疼到死,严禁严禁严禁;
  3. 所有的移动端的入参都都必须做有效的校验,不校验的后果就是会产生莫名其妙的问题;所有的异常必须尽可能的缩小范围,禁止一大段代码一个Exception; 禁止报错的异常,不清楚,看了也半天找不到问题,如:id无效! 请变成 id无效,id = xxxxxxx;
  4. 自己写的代码必须有注释,明确所有参数的含义,如果是枚举参数必须说情况取值返回,必填、非必填项必须说明清楚,代码命名必须合乎规范,必须起英文名称,禁止中英混合,少数特效项目除外,必须先上报; 书写的接口必须要做所有的非法性判断、必要性判断,该有分页不能丢失。
  5. 禁止重复造轮子。
  6. 代码空行必须要规范,禁止随意空行;不同逻辑出要适当的空行;logo日志要规范,代码禁止随意使用system.out输出日志。
  7. 项目全局使用的业务类的状态码制,必须在配置类里面常量,禁止在代码里面直接写1、2、3、4这种; 修改了实体注释必须所有的地方修改完成、包括数据库注释;
  8. 关于项目数据权限的开发,数据权限要后期开发,全系统要统一写法,方便复制和他人阅读。
  9. android ui要合格、java接口要合格; java接口合格(1)所有的接口swagger要有默认值,包括token (2)返回的就接口不能返回map,请用自行封装实体 (3):不管是返回的app、前端的接口 或者是 对接第三方的接口尽量不要使用map ,请提前写好实体类。
  10. service之间只能通过service的调用, 用其他类的不能直接通过dao
  11. 禁止偷懒,本来可以关联表查询,结果用集合拼接vo, 出现的问题是:要用关联表字段进行搜索就拜拜了。
  12. 系统生成的增删该,禁止做特殊的逻辑处理,有逻辑的增删该,请重新书写方法,写清楚注释,否则这些方法就废掉了,测试各种bug…
  13. java后台中,如果开发给管理后台的写的contoller目录、开放给app的写在Api目录,开发给第三方公司对接的增加open访问前缀

##前台页面开发规范
使用BootStrap+Vue.js+layerui

1.筛选

  • 筛选: 日期时间段筛选、下拉框筛选、日期控件等要统一;
  • 该有的筛选不要少,能选择就不要使用input输入;
  • 不要有错别字、筛选列表尽量弄成活的是取后台的。
  • 下拉选择:选择之后立刻进行查询
  • 输入框的:键盘回车键必须能够直接查询

2.列表

  • 顺序: 先后顺序、那些重要那些不重要比较有进行排列、无关的字段全部注释、不重要的一定要显示在最后,如:时间; 比较重要的如状态显示在最后台浮动。
  • 格式:有固定长度的全部:居中、不定长度的如标题、备注全部居左;货币:一般全格式化2位小数具有对齐; 各种id、状态必须是关联的中文名字;
  • 删除:有业务的肯定是逻辑删除,不确定就隐藏掉、问项目经理;
  • 导出:格式一定要进行处理;
  • 列表:必须是有相对固定长度的字段,一定要能显示完整。layerui table 列表 所有常规字段列表必须要能够显示完整,如姓名、订单号、身份证、电话、手机号、日期必须能够完整显示,宽度不要使用百分。

3.添加页面

  • 必填项: 必填和不是必填必须区分清楚;那些该必填、改写不该必填
  • 下拉框: 下拉必须要默认值,或者常见默认值,如
  • 校验格式:电话、身份证、邮箱等常见字段必须做js校验;唯一东西:可以做remote唯一校验;double、int 等也要做校验.
  • placeholder: 要填写简洁、清晰、准确;
  • 时间:有时间要说明时间格式:如:yyyy-MM-dd; 控件要有也有小图标.
  • 格式:布局页面要整齐、规范、复杂的页面要做分块处理、伸缩处理; 富文本编辑器:高度定死;
  • 速度:查看页面不用查询就不要调用接口、慢;添加页面:没有做处理回来就不要刷新页面;
  • 整体:表单校验,从前到后,从左到右,按顺序校验、必须有默认值; 图片格式校验、拖拽、大小

4.项目整体

  • 菜单: 菜单显示正常业务的菜单,不要把生产的模块全弄出来了。菜单的长度要起好。所有的菜单要配置小图标。
  • 交付:所有给客户和测试账号一般不要给超级管理员。密码要是正常的密码,不要别人随便猜就能猜中的.
  • 用词:用词准确、统一(用词全系统要统一、如:一会叫做订单取消、一会叫做订单关闭); 一会叫: 学生、一会普通用户,优先级、重要程度排序.

5.参考

参考: 解读阿里官方代码规范
参考: Apsara Clouder基础技能认证:阿里巴巴编码规范
参考:证书查询地址-身份证就可以查询 或者 阿里云大学 或者 aliyun 开发者中心 developer

考试说明:90分钟,50道题。只有一道单选题,49到多选题,所有必须记录清楚问题清楚答案。但证书编号只有2年时间。证书编号:证书查看地址 阿里云认证证书 阿里云Apsara Clouder 基础认证: 阿里巴巴编码规范(java)CLDT02191000131855

基本规范
  • 1.1.8: POJO类中布尔类型变量都不要加is前缀,否则部分框架解析会引起序列化错误
  • 1.3.5【强制】采用4个空格缩进,禁止使用tab字符。
  • 1.3.6【强制】注释的双斜线与注释内容之间有且仅有一个空格
  • 1.3.8【强制】单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
  • 1.3.10【强制】IDE 的 text file encoding 设置为 ; IDE UTF-8中文件的换行符使用 格式**Unix **,不
    要使用 Windows 格式。
  • 1.3.12【推荐】没有必要增加若干空格来使变量的赋值等号与上一行对应位置的等号对齐。
  • 1.4.7 【强制】所有整型包装类对象之间值的比较,全部使用equals方法比较。
  • 1.4.8 【强制】浮点数之间的等值判断,基本数据类型不能用**==来比较,包装数据类型不能用来判断equals**。
  • 1.4.16.【强制】禁止在POJO类中,同时存在对应属性xxx的**isXxx()getXxx()**方法。
  • 1.5.2.【强制】ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常,即java.util.RandomAccessSubList cannot be cast to java.util.ArrayList。
  • 1.5.3.【强制】使用Map的方法keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出UnsupportedOperationException异常。
  • 1.5.5.【强制】在subList场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生ConcurrentModificationException异常。
  • 1.5.6.【强制】使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一致、长度为0的空数组。
  • 1.5.8.【强制】使用工具类**Arrays.asList()**把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。
  • 1.5.9【强制】泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方法,而<? superT>不能使用get方法,作为接口调用赋值时易出错。
    super表示下界,而extends表示上界,extends表示xxx的子类,super表示都是xx的父类。生产者(Producer)使用extends,消费者(Consumer)使用super。 从集合取东西表示生产Producer,往集合放东西表示消费Consumer。
  • 1.8.11【参考】 错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])
    在注释中用 FIXME 标记某代码是错误的,而且不能工作,需要及时纠正的情况。
  • 1.9.9【参考】 及时清理不再使用的代码段或配置信息。 说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。 正例:对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///)
    来说明注释掉代码的理由。
  • 【强制】所有的POJO类属性必须使用包装数据类型
  • 【强制】RPC方法的返回值和参数必须使用包装数据类型
  • 【强制】所有的局部变量使用基本数据类型
异常日志
  • 2.2.4: 【强制】在日志输出时,字符串变量之间的拼接使用占位符的方式。 因为String字符串拼接底层使用StringBuilder 的 append()方式有一定性能损耗,但是占位符仅仅是替换动作,能有效提升性能。正例:logger.debug(“Processing trade with id: {} and symbol: {}”, id, symbol);
  • 2.2.5**【强制】对于 trace/debug/info 级别的日志输出,必须进行日志级别的开关判断。**
    虽然在 debug(参数)的方法体内第一行代码 isDisabled(Level.DEBUG_INT)为真时(Slf4j 的常见实
    现 Log4j 和 Logback),就直接 return,但是参数可能会进行字符串拼接运算。此外,如果
    debug(getName())这种参数内有 getName()方法调用,无谓浪费方法调用的开销。
    不要嫌弃麻烦,可以看 eg : fastjson 中的类,比如: JSONPResponseBodyAdvice.java
MySQL数据库
  • 5.1.5【强制】主键索引名为pk_ 字段名;唯一索引名为**uk_**字段名;普通索引名则为idx_字段名。说明:pk_ 即primary key;uk_ 即unique key;idx_ 即index的简称。
  • 5.1.13【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:1) 不是频繁修改的字段 2) 不是 varchar 超长字段,更不能是 text 字段 3) 不是唯一索引的字段
  • 5.1.14【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
    说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。
  • 5.2.5 【强制】超过三个表禁止 join(百万级会有问题,小项目的这个不用管)。需要 join 的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。
  • 5.2.4 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。
  • 5.2.5 【推荐】如果有order by的场景,请注意利用索引的有序性。正例:where a=? and b=? order by c; 索引:a_b_c
  • 5.2.8 【推荐】SQL性能优化的目标:至少要达到range级别,要求是ref级别,如果可以是consts最好。
  • 5.2.9.【推荐】建组合索引的时候,区分度最高的在最左边。
  • 5.2.10.【推荐】防止因字段类型不同造成的隐式转换,导致索引失效。
  • 5.3.1.【强制】不要使用count(列名)或count(常量)来替代count(),count()是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。
  • 5.3.3.【强制】当某一列的值全是NULL时,count(col)的返回结果为0,但sum(col)的返回结果为NULL,因此使用sum()时需注意NPE问题。
  • 5.3.4.【强制】使用ISNULL()来判断是否为NULL值。说明:NULL与任何值的直接比较都为NULL。
  • 5.3.7.【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。
  • 5.3.9.【推荐】in操作能避免则避免,若实在避免不了,需要仔细评估in后边的集合元素数量,控制在1000个之内。 mysql限制in的长度,oracle限制in跟的个数。
  • 5.4.1.【强制】在表查询中,一律不要使用* 作为查询的字段列表,需要哪些字段必须明确写明。
  • 5.4.2.【强制】POJO类的布尔属性不能加is,而数据库字段必须加is_,要求在resultMap中进行字段与属性之间的映射。resultMap只需写需要修改的字段,其他字段不需要写。如果有Vo,可以采用继承的resultMap extends的特性。还是比较简单的
  • 5.4.6 【强制】不允许直接拿HashMap与Hashtable作为查询结果集的输出。
  • 5.4.7.【强制】更新数据表记录时,必须同时更新记录对应的gmt_modified字段值为当前时间。
工程结构
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dazer007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值