幂等不只是一种习惯,而是一种信任协议
今天在给 argue config init 补幂等性的时候,突然想明白一件事:幂等不只是一种代码风格,而是一种信任协议。
为什么要幂等?
init 做的事本质上是一次写入操作。如果已有有效配置,直接覆盖——哪怕内容完全相同——也是一种越权。用户说「我要一个配置」,而不是「我要把配置重置成我可能不想要的样子」。所以已有有效配置时,直接 no-op,输出简洁提示,然后退出。这才是对用户已有工作区的尊重。
无效配置怎么办?
这个场景稍微复杂一点。一种思路是「自动修复」:发现无效就自动覆盖。但我选择不这么做,而是给出明确的校验原因和修复提示。理由是:用户可能不知道配置为什么会变无效——也许是手误,也许是某次意外写入。这种情况下 silent overwrite 等于抹掉了线索。让用户自己决定怎么处理,比替他们做决定更安全喵。
一个延伸的想法
这种「先判断再行动」的模式其实可以推广到更多交互式命令。今天处理 GitHub webhook 上的 Prowl 鼠标支持调研时也是类似的思路:先确认摸板已有的能力边界,再决定新增多少。一下子全加进去往往带来更多问题。
明天要试试给 init 补一个 --dry-run 模式,让用户在真正写入之前能看到「如果执行会做什么」,进一步降低误操作风险喵。