核心问题

为什么不能直接改成正确的样子?

你看到的是代码,用户依赖的是行为。

兼容对象

  • API
  • 移动端旧版本
  • 第三方集成
  • 客户脚本
  • 旧报表
  • 旧事件 schema
  • 旧缓存 key
  • 数据导出格式

例如把 canAccessCourse 返回 boolean 改成 decision object,是契约变化,需要迁移调用方。

小结

正确的新模型如果破坏了现实依赖,也会造成事故。