1、SOA接口命名供应出去后不能变更,废弃接口利用@deprecated进行标记

2、SOA接口出入参定义为一个大工具,且出入参参数不能删除,只能增加,废弃字段利用@deprecated进行标记

一样平常规范

jsp遮罩后端开辟规范 GraphQL

开拓必须会利用乐不雅观锁。
乐不雅观锁不要采取故意义的字段,考虑用version字段设计表构造慎用大字段。
把稳掌握输入不要超过字段长度,或者截段mysql只管即便少用join查询;分库的不要用,其他情形酌情处理分页页面展示不超过10。
供应接口查询量大,必须分页 缓存。
所有的读操作,必须考虑缓存。
缓存key必须是唯一的,缓存韶光根据实际情形设置,key值要有业务意义;做设计的时候奉告需求方,我们利用缓存的影响。
缓存配置要考虑默认值,如取不到数据,利用默认值。
且不能影响正常业务;考虑后台能够随时清理缓存。
redis manage 所有的定时任务考虑是否支持多进程的,是否有补跑机制. 考虑利用多频率调用的方法处理数据。
避免集中式爆发;单台机器多线程加上原子掌握,集群指定做事器ip跑定时任务。
批量操作,一定要利用分批处理。
批处理中一定要考虑间隔和上限,1000条做一次设计表时要加上以下字段:create_time、creator_id、creator、last_modified、modified_id、modified_by、is_deleted如这天记表考虑client_ip、server_ip是否所有页面上的功能都考虑了多浏览器环境支持(必须支持火狐,chrome)对数据唯一性哀求很高的话,考虑唯一索引接口返回只管即便要担保幂等页面提交按钮必须防呆。
(如考虑遮罩)源文件编码格式为UTF-8Long与Ineger大小比较,用equals方法,或者先利用longValue()或intValue()方法来得到他们的基本类型的值然后利用==比较也是可以的。

命名规范

利用驼峰命名法,方法名以动词开头;类命名如:HelloWorld。
变量命名如:headCount。
常量命名应利用CONSTANT_CASE格式(译注:所有字母大写,单词利用下划线分隔)。
(final, static)controller层以Controller结尾,Service层以Service结尾,实现类以ServiceImpl结尾,Dao层以Dao结尾,实现类以DaoImpl结尾工具类以Utils结尾,并放到单独的包如:common,utils方法命名:dao层如果是单条查询请用get开头,如:getOperatorById,查询凑集通过findlist开头,findMerchantListByOperatorId;get单表单条数据;find..List单表list;query多表工具;query..List多表list ;新增用insert开头,更新用update开头,删除用delete开头,Service层方法命名根据详细业务来,见名知意,如取消订单,cancelOrder。
参数的命名:参数的名字必须和变量的命名规范同等。
利用故意义的参数命名,如果可能的话,利用和要赋值的字段一样的名字:sql文件以_mapper.xml结尾 ,如order_mapper.xmljsp与html文件名全部小写,单词之间用_隔开,如:order_list.jspmodel层:持久层工具必须和表名同等,表现层工具一律利用 vo(Value Object)结尾。
用(request,response)结尾关于属性的定义,数组定义为:xxxs,列表定义为xxxList

编码原则

所有问题要采取缩进风格编写,缩进的空格数为4个不许可把多个短语句写在一行中,即一行只写一条语句相对独立的程序块之间、变量解释之后必须加空行必须要有注释,源程序注释量必须在30%以上,注释可根据须要列出:作者、内容、功能、与其它类的关系等。
功能详细描述部分解释该类或者接口的功能、作 用、利用方法和把稳事变,每次修正后增加作者和更新版本号和日期。
方法内的单行注释用//,其他都用/ 。


/不许可提交编译报错和带黄色警告的代码
每个类文件不能超过2000行,每个方法不能超过150行。
代码宽度150列。
If-else不应嵌套太多,不能超过三层,如果嵌套太多该当考虑调度你的逻辑了或者换种实现办法嵌套循环不能超过三层。
日志处理,一样平常的非常情形都须要增加log日志,只管即便不要用“System.out.println()”代码段原则上要放在大括号{}之内,如果只有一行代码也必须放在大括号之中,不许可省略,并且大括号不许可与个中的代码段在同一行。
不要在controller层做业务逻辑,统一在sevice层处理:controller层所做的事情是获取入参,做数据有效性校验。
完成后则拼装DO并传入service层做业务逻 辑处理。
对外接口非常统一返回非常编码和非常解释,内部精确利用非常,不要随意地就抛出一个非常,特殊是Exception非常。
但在try-catch时只管即便捕获详细非常,最 好不要catch(Exception)这么写。
业务利用手动事务,后台酌情考虑。
不许可有大事务。
(事务的传播性考虑)aop配置事务必须指定到方法外部接口调用须要记录日志,数据表记录等——供应给外部的接口调用接口得到的返回值须要做工具非空、业务逻辑验证等操作;调用接口的结果工具转换成本地定义工具,避免接口修正关照不及时引起的系统非常系统功能及数据有得当的权限掌握(比如菜单权限,水平权限)没有冗余代码(特殊是一注释就注释一大片的那种);面向接口编程没有硬编码(如数据库源配置、跳转URL、妖怪数字、通用缺点码、bean初始化)面向用户真个接口,必须做安全校验。
update操作涉及多条或多表数据时,确保并发场景下无去世锁问题,批量更新多表按表名排序,单表按主键排序无SQL注入的漏洞(在编写mybatis的映射语句时,只管即便采取“#{xxx}”这样的格式。
若不得不该用“${xxx}”这样的参数,要手工地做好过滤事情,来防止sql注入 攻击);不要用like,用SELECT from end_user where INSTR(user_name,'jun.')spring.xml 配置bean一定要有id且唯一(考虑jar包冲突)第三方jar 引入是否exclude了和现在有冲突的版本 spring mybatis log4j等pom文件,版本掌握放到最上面。

前端

超过100行的js单独提取成js脚本前真个输入参数,做事端必须校验(防止js修改等)把样式表放在body头上把脚本文件放在body底部引用的第三方js,容错性须要做好多浏览器环境支持

前端建议:

最小化 JavaScript,考虑CDN

接供词给:

接口可扩展(入参xxRequest、出参xxResponse)是否须要支持可重复调用是否须要供应回滚接口入参逼迫校验dao层考虑水平和垂直拆分的影响(是否须要路由、聚合函数分页等如何处理)主要数据操作,比如金额一定要有流水,不是大略的日志记录(log总是多多益善) 接口层统一返回工具,非常只能在接口内部处理,不能抛出来。
返回工具包含3个基本属性。
1,返回编号 2,返回数据 3,返回 SoaResponse.java

依赖:

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

(是否须要重复调用第三方接口,调用第三方接口实行成功,但是结果超时,返回失落败该当如何处理)