开发规范__笔记

开发规范:

1.开发必须会使用乐观锁。乐观锁不要采用有意义的字段,考虑用version字段

2.设计表结构慎用大字段。注意控制输入不要超过字段长度,或者截断。

3.Mysql尽量少用join查询;分库的不要用,其他情况酌情处理。

4.分页页面展示不超过10. 提供接口查询量大,必须分页。

5.缓存。所有的读操作,必须考虑缓存。缓存key必须是唯一的,缓存时间根据实际情况设置,key值要

有业务意义,做设计的时候,告知需求方,我们使用缓存的影响。缓存配置要考虑默认值,如取不到数据,

使用默认值。且不能影响正常业务;考虑后台能随时清理缓存。Redis manage

6.所有定时任务考虑是否支持多线程的,是否有补跑机制。考虑使用多频率调用的方法处理数据。避免集

中式爆发;单台机器多线程+原子控制,集群指定服务器ip跑定时任务。

7.批量操作,一定要使用分批处理。批处理一定要考虑间隔和上限,1000条做一次。

8.设计表时要加上以下字段:create_time,create_id,cretor,last_modified,modified_by,is_deleted。如是日志表,

考虑client_ip,server_ip。

9.是否所有页面上的功能都考虑了多浏览器环境支持(必须支持火狐,chrome)

10.对数据唯一性要求很高的话,考虑唯一索引。

11.接口返回尽量要保证

12.页面提交按钮必须防呆。(如考虑遮罩)

13.源文件编码格式为utf-8.

14.Long与Integer大小比较,用equals方法,或者先使用longValue()或者intValue()方法来得到

他们的基本类型的值然后使用==比较也可以。

命名规范:

1.使用驼峰命名法,方法名以动词开头;类命名如:HelloWorld。变量命名如:headCount。

常量命名使用CONSTANT_CASE

2.controller层以**Controller结尾,Service层以**Service结尾,实现类以**ServiceImpl结尾,

Dao层以**Dao结尾,实现类以**DaoImpl结尾。

3.工具类以Utils结尾,并放到单独的包如:common.utils

4.方法命名;dao层如果是单条查询请用get开头,如getOperatorById,查询集合通过find*list

开头,findMerchantListByOperatorId;get单表单条数据;find..list单表list;query多表对象;

query..List多表list;新增用insert开头,更新用update开头,删除用delete开头,Service层

方法命名根据具体业务来,见名知意,如取消订单,cancelOrder。

5.参数的命名:参数的名字必须和变量的命名规范一致。使用有意义的参数命名,如果可能的

话,使用和要赋值的字段一样的名字;

6.sql文件以*_mapper.xml结尾,如order_mapper.xml

7.Jsp与html文件名全部小写,单词之间用_隔开,如order_list.jsp

8.Model层:持久层对象必须和表名一致,表现层对象一律使用vo结尾。用Request,response结尾。

编码原则:

1.所有问题要采用缩进风格编写,缩进的空格数为4个

2.不允许把多个短语写在一行中,即一行只写一条语句

3.相对独立的程序块之间,变量说明之后必须加空行

4.必须要有注释,源程序注释量必须在30%以上,注释可根据需要列出:作者,内容,功能,与

其他类的关系等。功能详细描述部分说明该类或者接口的功能。,作用,使用方法和注意事项,每次

修改后增加作者和更新版本号和日期。方法内的单行注释用//,其他用/**...**/

5.不允许提交编译报错和带黄色警告的代码

6.每个类文件不超过2000行,每个方法不超过150行。代码宽度150列。

7.If-else不应嵌套太多,不能超过三层,如果嵌套太多,应该考虑调整你的逻辑或者换种实现

方式嵌套循环不超过三层。

8.日志处理,一般的异常情况都需要增加log日志,尽量不要用“System.out.println()”。

9.代码原则上要放在大括号{}之内,如果只有一行代码也必须放在大括号之中,不允许省略,

并且大括号不允许与其中的代码段在同一行。

10.不要在controller层做业务逻辑,统一在service层处理:controller层所做的事情是获取入参,做

数据有效性校验。完成后则拼装DO并传入service层做业务逻辑处理。

11.对外接口异常统一返回异常编码和异常说明,内部正确使用异常,不要随意就抛出一个异常,特别

是Exception异常。但在try-catch时尽量捕获具体异常,最好不要catch(Exception)这么写。

12.业务使用手动事务,后台酌情考虑。不允许有大事务。(事务的传播性考虑)aop配置事务必须指定到方法。

13.外部接口调用需要记录日志,数据表记录等--提供外部的接口。

14.调用接口获得的返回值需要做对象非空,业务逻辑验证等操作;调用接口的结果对象转换为本地定义

对象,避免接口修改通知不及时引起的系统异常。

15.系统功能及数据有合适的权限控制(比如菜单权限,水平权限)

16.没有冗余代码(特别是-注释就注释一大片的那种);面向接口编程。

17.没有硬编码(如数据库原配置,跳转url,魔鬼数字,通用错误码,bean初始化)

18.面向面向用户端的接口,必须做安全校验。

19.Update操作涉及多条或多表数据时,确保并发场景下无死锁问题,批量更新多表按表名排序,

单表按主键排序。

20.无sql注入的漏洞(在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用

“${xxx}”这样的参数,要手工地做好过滤工作,防止sql注入(攻击),不要用like,用selet * from

End_user where instr(user,;jun.’);

21.Spring.xml配置bean一定要有id且唯一(考虑jar包冲突)

22.第三方jar引入是否exclude了和现在又冲突的版本spring mybatis log4j等

23.Pom文件,版本控制放到最上面。

前端:

1.超过100行的js单独提取成js脚本

2.前端的输入参数,服务端必须校验(防止js篡改等)

3.把样式表放在body头上

4.引用第三方js,容错性需要做好

5.多浏览器环境支持

前端建议:

最小化JavaScript,考虑CDN

接口提供:

1.接口可扩展(入参xxRequest,出参xxResponse)

2.是否需要支持可重复调用

3.是否需要提供回滚接口

4.入参强制检验

5.Dao层考虑水平和垂直拆分的影响(是否需要路由,聚合函数分页等如何处理)

6.重要数据操作,比如金额一定要有流水,不是简单的日志记录(log总是多多益善)。

7.接口层统一返回对象,异常只能在接口内部处理,不能抛出来。返回对象包含3个基本属性。

(1)返回编号

(2)返回数据

(3)返回消息

8.SoaResponse.java

依赖:

必须做异常处理,并区分业务异常和系统异常。

(是否需要重复调用第三方接口,调用第三方接口执行成功,但是结果超时,返回失败应该如何处理

数据库开发规范:

命名:

(1)库名,表名,字段名,使用小写字母

(2)库名,表名,字段名,尽量见名知意,使用下划线分割

(3)不要超过30个字符

(4)禁止使用mysql保留字

(5)临时库,表名,必须以tmp为前缀,以日期为后缀,例如tmp_product_20130202

库表设计:

(1)表必须有主键,使用bigint unsigned类型,主键只使用一个字段,使用auto_increment属性,主键统一

使用id。

(2)所有字段都必须注释所有表都必须有说明。

(3)访问频率低的或大字段放到扩展表里,分离冷热数据。

(4)多张关联表之间,适当的冗余字段,可以减少join查询

(5)依据查询场景建适当的索引和增加备用的字段。

(6)如果预计数据量较大,预先制定分表策略,如按日期拆分或按某键值取模分表

索引创建

(1)如多个字段组合有唯一性需要,可以创建唯一索引

(2)不在低基数(低筛选度)的列上建立索引,例如“性别”

(3)禁止冗余索引,如已有(a,b)索引,可以删除(a)索引

(4)合理创建组合索引(a,b,c)相当于(a),(a,b),(a,b,c)

(5)组合索引的组成字段数尽量不超过3个

(6)组合索引中,区分度大(高筛选度)的字段放在最前

(7)尽可能利用索引完成排序,即排序的字段在索引里

(8)禁止使用外键,防止死锁,避免隐藏的数据逻辑

(9)数据扫描过多,如所有索引的过滤性不佳,会放弃使用索引

(10)仅使用最有效的过滤条件,索引不是越长越好,where条件不是越多越好

(11)Sqlmap后面把id加上/*sqlid*/

(12)普通索引按照“idx_字段名称[_字段名称]”进行命名,例如idx_uniq_age_name

(13)索引名必须全部使用小写,过长的字段名可以采用缩写形式,例如idx_age_name_add

 注:笔记部分可能参考其他作者内容的一个记录,仅为加深自己对概念的理解,这里一些可能忘记参考谁的了,所以望见谅。

原文地址:https://www.cnblogs.com/cangdingju/p/5520138.html