开发规范__笔记

开发规范:html

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

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

3.Mysql尽可能少用join查询;分库的不要用,其余状况酌情处理。mysql

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

5.缓存。全部的读操做,必须考虑缓存。缓存key必须是惟一的,缓存时间根据实际状况设置,key值要sql

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

使用默认值。且不能影响正常业务;考虑后台能随时清理缓存。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

 

 注:笔记部分可能参考其余做者内容的一个记录,仅为加深本身对概念的理解,这里一些可能忘记参考谁的了,因此望见谅。

相关文章
相关标签/搜索