用途
该技能是一项设计原则,适用于设计命令、生命周期步骤或处理循环,这些操作运行在崩溃、重启和重试成为常态的环境中。其目标是让操作无论运行多少次、上一次运行在何处停止,都能收敛到正确的最终状态。
主要能力
- 要求每个状态变更操作回答两个问题:如果运行两次会怎样?如果上一次运行中途崩溃会怎样?
- 主张从当前存在的状态推导每一步,而不是从上一次运行意图做什么来推导。具体做法是读取当前状态、与目标比较、只应用差异。这样写出的步骤可以安全重复,因为重复执行时已无剩余工作。
- 要求运行遗留的任何东西(锁、临时文件、半写记录、已认领任务)都能被下一次运行识别为过期。判断过期应依据在上一次运行可能停止的任何位置都成立的证据,而不仅是常见情况。
- 提供示例做法:写入临时路径后重命名到位,或按内容而非创建顺序比较产物。
使用方式
该技能以测试形式给出判断标准:
- 如果连续运行两次会怎样?
- 如果上一次运行在每个可能点都崩溃会怎样?
- 重新执行是否收敛到同一最终状态?
如果任一答案取决于遗留了什么状态,则该操作需要增加一个协调步骤。
适用场景
适用于命令、生命周期操作和处理循环的设计,这些操作运行在崩溃、重启和重试正常发生的环境中。当部分状态变更会影响下一次运行结果时,每次重启都会变成调试过程,此时该原则尤为相关。
限制
资料未提供关于具体实现语言、平台、工具或代码示例的更多细节。