
我们在 ADT 里修改一张销售订单,把状态从草稿改成已释放,金额、交货日期和审批信息也一并更新。界面已经呈现新值,行为实现里的校验可以读取新值,可数据库中的正式记录还没有完成持久化。此刻,变化已经存在,却没有成为所有会话都能稳定观察到的业务事实。若一定要从 ABAP 世界里寻找机械势能与重力势能的近似物,这种悬在提交边界之前、等待保存或撤销的事务性状态,就是最贴切的答案。更准确地说,ABAP 语言没有名为机械势能、重力势能或 potential energy 的内建概念,也没有统一的能量模型。最接近机械势能的,是可积累、可延迟兑现、能在触发条件到来时改变持久化世界的状态。最接近重力势能的,则是相对于持久化基准面而暂存在事务缓冲区中的未提交变化。进入数据库,好比物体落到基准面并把原有位置状态转换成实际效果。执行回滚,则像把这段尚未释放的可能性直接撤掉,而不是让它做功。为什么普通变量还不够像势能物理里的势能并不是某个物体装了多少内容,而是系统因为位置、形变或相互作用关系而具备的做功能力。重力势能依赖物体相对于参考面的高度,弹性势能依赖弹簧相对于自然长度的形变。参考面可以人为选定,可一旦选定,状态差就决定了后续可能释放的能量。把这个判定方式移到软件里,类比对象至少要具备几项特征。它需要承载一种尚未完全兑现的状态,需要存在清晰的释放边界,需要在释放后产生可观察的系统变化,也需要允许撤销、失败或转化。单纯的局部变量只满足承载状态这一项。一个整数变量从0改成100,并不会自动引起数据库更新、消息发送或业务对象状态迁移。它更像装着数字的盒子,不像被抬高的重物。ABAP Memory 也不是最好的答案。