以 golang 为例:
func do() {
err := step1()
if err != nil { return err}
err = step2()
if err != nil {
rollback_err = undo_step1();
if rollback_err != nil {
return err
}
}
}
这样写的缺点是,步数越多后面越复杂。
尝试每个步骤后使用 defer 注册 rollback,带来的问题是无法直接跳出 defer 栈: 比如 step3 错误,undo_step2() 也要进行错误处理,如果也错误,那应该直接返回错误而不是继续执行 undo_step1 (在 step1 之后注册的 defer )
有什么更好的模式吗?
1
K1W1 2020-11-05 18:22:53 +08:00 via Android
goto ?
|
2
ningmengmao 2020-11-05 18:28:48 +08:00 via Android
用职责链模式试试?
|
3
seth19960929 2020-11-05 18:55:13 +08:00 via Android
用一个数组包装所有函数
执行失败数组指针回滚一位 回滚了两次直接跳出数组循环 |
4
aragakiyuii 2020-11-05 19:09:48 +08:00 via iPhone
写个接口,包括操作和回滚方法,分别实现然后放到数组里...😂
|
5
jinhan13789991 2020-11-05 20:01:11 +08:00 via Android
设计模式在备忘录模式
|