一张销售订单刚保存,仓库需要收到发货准备指令,财务还需要收到信用占用信息。业务人员只按了一次保存,后台却有两件事要办。这种「一次指令,连续产生两次效果」的画面,很容易让人想到《轩辕剑叁外传·天之痕》里的姜公胆。不过,真正值得类比的并非简单地把同一段代码执行两遍,而是弄清楚两次处理各自做什么、付出什么成本、失败时如何收场。
游戏资料对姜公胆的描述相当明确。装备后,角色可以在战斗中使用「连击」指令,对指定敌人进行两次物理攻击。法宝尚未成长时,每次攻击存在攻击力折损,随着成长,折损从约四成逐步降到零。另有攻略记载,这项指令消耗八十点体力。这里有三个不能拆开的特征,新增一项能力、用一次指令触发两次动作、以资源和初期折损作为代价。成长带来的改进,也不是把两击变成三击,而是让原有的两击逐渐更有力。
ABAP 没有名叫姜公胆的内置对象,也不存在把法宝「装备」到程序上就自动获得连击的语言开关。若把它当成设计隐喻,最贴近的是一个受控的复合业务动作。入口只接受一次调用,内部按规则完成两个有联系的步骤,并且对成本、事务和结果作统一管理。在传统 ABAP 里,这可能由应用服务类配合数据库事务、锁对象、更新任务或后台处理构成。在 SAP BTP ABAP 环境中,更自然的载体通常是 RAP 业务对象的动作,或者由动作发起的受控后台处理。两边都能实现「连击」,但可用接口和事务约束并不相同。
先把游戏里的数字算清楚,类比才不会跑偏。假定普通攻击的基础伤害为一百,法宝初期使每次攻击降低四成,两击各造成六十,总量是一百二十。满成长后,每击恢复到一百,两击总量是二百。这个模型只用于解释机制,并不声称游戏的最终伤害必定等于这些数值,实际战斗还会受到敌方防御等规则影响。它揭示了一个重要细节,两次处理带来的收益不能只看次数。每次处理的质量、系统付出的成本,以及失