核心问题

系统越界时,应该继续跑还是立刻停?

工程困境

坏代码:

function refund(order) {
  order.status = "refunded"
}

它允许 pending、canceled、甚至 already refunded 的订单再次退款。

思想模型

断言是在守卫逻辑边界:

assert(order.status === "paid", "ONLY_PAID_ORDER_CAN_BE_REFUNDED")

如果这个条件不成立,继续运行比失败更危险。

好做法

防御性编程不是到处 try-catch,而是把关键不变量写成代码:

function refundOrder(order) {
  assert(order.status === "paid", "ONLY_PAID_ORDER_CAN_BE_REFUNDED")
  assert(order.refundedAt == null, "ORDER_ALREADY_REFUNDED")
  return { ...order, status: "refunded", refundedAt: new Date() }
}

Atlas Action

找一个直接改 status 的地方。把它替换成命名动作,并在入口写断言。

小结

断言不是装饰,而是系统拒绝进入非法世界的门。