代码规范(底线)
2024-11-06 19:59:04 0 举报
AI智能生成
知识就是力量,知识就是黄金
作者其他创作
大纲/内容
规范执行
第一次,集体宣讲
新人入职(由负责人讲解)
代码Reivew(至少一种)
互相Review
负责人Review
投影集体Review
整改
历史代码,排期整改
新代码不允许有不合强制规范的代码
线上发现新代码有不合强制规范的
立即修改
有线上事故(问责)
接口结果判断
结果格式
本次有请求处理状态(订单类的,并不一定代表订单状态,如重复请求)
本次请求返回码
返回结果
交易状态(有落地请求或订单的,会有订单状态)
直接调用
成功判断
本次请求处理状态=成功&&交易状态=成功(如果有)
失败判断
本次请求处理状态=失败&&交易状态=失败(如果有)
本次请求处理状态=失败&&本次请求返回码=具体值
其它处理中
不能if成功else失败;if失败else成功;if异常=失败else成功
查询结果
成功
失败
不存在
考虑极端情况,网络延迟或拌动(查询不存在,最后成功了)
处理中
补偿
范围
非原子的写操作
所有远程有一致性要求的写操作
任何造成持久化变更的操作
查询
通过唯一请求号查询
重试
接口推进(必须有一种,不允许用数据修复代替补偿)
定时任务
人工调用重试接口
失败重试
调用方必须在明确失败后才能重试
调用方必须保证同一时刻,不能有两个非失败的请求
调用方必须保证不并发创建请求号
非预期的失败,必须人工判断后才能重试
如冻结成功,解决失败;支付成功,加资产失败
不存在重试
调用方必须保证请求号相同
数据库事务
要保持原子的多个SQL更新必须放在一个事务
数据事务不能有远程调用
危害
远程调用异常后,本地记录被回滚(远程成功,本地无记录,造成重复调用,严重会重复加资产或出款)
tomcat线程数和DB配置不一致,导致连接池被耗尽
方案
用API方式分开远程调用前后事务
必须指定事务管理器,防止多数据源事务不一致
字段更新
有状态变更
where条件必须带原状态且必须参与更新前的if判断
交易字段更新(如金额,其它交易过程中的非状态字段)
where条件中必须有一个变化字段的原值且参与更新前的if判断
金额累计
必须在SQL中累计(amount=amount+xxx)
防止重复累计
记录累计流水
累计订单号建立唯一索引
累计和流水创建在一个事务
乐观锁更新失败,事务必须回滚
乐观锁必须判断update的更新条数
字段范围
只更新要更新的字段
不能更新直接load出来的对象
方案
new 新对象,设置主键与要更新的值
任务依赖
任务执行前检查依赖任务是否完成
任务执行前检查依赖的数据是否处理完成
只做明确的事
只在if中写逻辑代码
防止添加逻辑时,意外被else处理
else抛异常或报警
if(a=1)do xx else(a=2 || a=3)do xxx else 异常或报警
0 条评论
下一页