跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如果一段代码流程里有很多顺序操作,在某个步骤失败的时候,需要回退之前的操作,怎么写优雅呢?
未分類
5 11 月 2020

如果一段代码流程里有很多顺序操作,在某个步骤失败的时候,需要回退之前的操作,怎么写优雅呢?

如果一段代码流程里有很多顺序操作,在某个步骤失败的时候,需要回退之前的操作,怎么写优雅呢?

資深大佬 : rrfeng 4

以 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 )

有什么更好的模式吗?

大佬有話說 (5)

  • 資深大佬 : K1W1

    goto ?

  • 資深大佬 : ningmengmao

    用职责链模式试试?

  • 資深大佬 : seth19960929

    用一个数组包装所有函数
    执行失败数组指针回滚一位
    回滚了两次直接跳出数组循环

  • 資深大佬 : aragakiyuii

    写个接口,包括操作和回滚方法,分别实现然后放到数组里…

  • 資深大佬 : jinhan13789991

    设计模式在备忘录模式

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具