老子说,反者道之动。弱者道之用。天下万物生於有,有生於无。放到 SAP ABAP 开发里看,这不是一句离工程很远的玄言,而像一条很朴素的系统生存法则。一个长期运行的 SAP 系统,不是靠代码堆得越来越厚来变强,也不是靠增强点、隐式修改、复制标准程序、硬编码配置来证明自己有掌控力。真正能活得久、升得动、跑得稳的 ABAP 系统,往往有一种反向的力量,知道什么时候退回标准,什么时候把复杂收回模型,什么时候让代码变轻,什么时候让扩展离核心远一点。
在 ABAP 现场里,最容易让人上瘾的是有。表里有字段,程序里有分支,增强里有逻辑,配置里有开关,接口里有兼容处理,日志里有兜底记录。每一个有都看起来很合理,每一个有都对应一个业务要求。可系统运行几年后,真正压垮我们的,恰恰是这些有之间的互相缠绕。一个销售订单增强调用库存检查,库存检查又读自定义表,自定义表的维护又挂了权限逻辑,权限逻辑又通过某个老的 Function Module 间接访问未释放对象。短期看,需求交付了。长期看,系统的道开始被堵住,升级不敢升,性能不敢查,代码不敢改。
SAP 近年的 ABAP Cloud 和 Clean Core 思路,某种程度上正好对应这种回环。SAP 官方文档把公开 released API 作为 SAP 代码与 repository object 之间的接口边界,ABAP Development Tools 里也能看到开发对象的 API State,用来判断对象是否被释放给外部消费。(