我今天在看一类很有代表性的治理动作,团队已经把某个开发对象打磨出更好的替代者了,接口更稳,语义更清楚,兼容 Cloud 的约束也更完整,可系统里还是有人继续引用旧对象。这个时候,最糟糕的做法不是不管它,也不是一把删除,而是让旧对象继续以 Released API 的身份被新开发反复使用。SAP 在 ADT 里给出的做法很克制,也很成熟,你可以把一个已经 Released 的开发对象标记成 Deprecated,同时强制为它指定 successor。这样一来,旧对象不会立刻从系统里消失,但所有后续开发都会收到明确的迁移信号,语法检查还能直接把替代对象指给你看。这个设计非常贴近企业项目真实节奏,既照顾存量代码,又给新代码立下规矩。(SAP Help Portal)很多人一看到 Deprecated,就容易把它和删除、停用、不可访问混在一起。放到 SAP ABAP 的 Released API 语境里,这几个词差别很大。Deprecated 不是把对象从公共 API 世界里抹掉,官方文档写得很清楚,处于 Deprecated 状态的对象仍然可作为 public API 被访问,只是已经不建议继续使用,原有使用点应该迁移到 successor 上去。这个语义非常关键,因为它决定了废弃动作的目标不是把旧对象从今天开始全部切断,而是把未来的演进方向钉牢,让平台、框架和消费方都知道