核心问题
系统中有哪些条件,无论什么时候都必须为真?
工程困境
银行转账里,A 给 B 转 30 元。最重要的不是 A 少 30、B 多 30,而是:
Total_Money = UserA_Balance + UserB_Balance
这个等式不能被并发、崩溃或重试打破。
思想模型
不变量是系统变化过程中必须始终为真的谓词:
P(system) = sum(all_balances) == total_money
好模型
课程平台里的不变量:
revoked grant 不能授予访问权。
refunded order 必须曾经 paid。
removed member 不能继续分配课程。
archived course 不能被新购买。
Atlas Action
选一个业务流程,列出 5 条“永远必须为真”的句子。然后标注它们由什么守护:类型、事务、断言、数据库约束、测试,还是人的记忆。
小结
代码会变,状态会变,流程会变;不变量不能变。