订单接口正在接收海外子公司的请求,其中一笔订单带着异常高的折扣率。程序当然可以等到订单创建失败,再从日志里寻找原因;更稳妥的做法,是让一条规则在保存之前持续生效,识别风险、限制影响,并把处理结果留给业务人员查看。拿这个场景对照《轩辕剑叁外传:天之痕》中的朱雀火羽,类比就有了落脚点。
朱雀火羽容易被名字带偏。火羽听起来像一件放出火焰攻击敌人的法宝,但游戏资料描述的核心效果是装备后增加火系抗力,成长充分时可达到较高的抗力值。有资料将上限写为 80。也就是说,它更像一件持续生效的防具。角色遇到火系攻击时,原本要承受的伤害被削减了一部分;没有遭遇火系攻击时,装备仍在身上,却不会凭空制造战果。
ABAP 里没有一个叫朱雀火羽的标准对象,也没有给业务程序统一开启的 80% 防护开关。如果借用它来理解系统设计,贴切的对应物是一组按风险类型生效的规则。规则被部署并启用,业务请求进入时自动判断是否适用,在造成业务后果之前降低损害,同时留下可检查的证据。这组能力可能分布在 RAP 校验、权限检查、接口入口校验、数据库约束和应用日志之间。它们各管一段,合在一起才接近法宝的效果。
这里有个容易混淆的地方。火系抗力不是火系攻击力。把朱雀火羽对应成 HANA 并行计算、ABAP 异步任务或者批量作业,虽然听起来很有气势,方向却反了。这些技术主要帮助程序更快地完成工作。倘若一条错误的折扣规则被更快地执行,系统受到的损害甚至会扩大。朱雀火羽式设计关心的是,当特定风险抵达时,我们是否识别了它,以及它最终能造成多大影响。
回到订单折扣。假定我们的业务约定是,普通销售订单的折扣率不能超过授权上限,超过上限的订单必须进入审批。海外子公司的一次接口升级,把折扣字段从百分数15改成小数0.15