當程式丟出異常時,調用者會希望能從異常中恢復正常,這對受檢異常來說尤為重要,一般而言,失敗的方法應該讓物件保持在被調用之前的狀態,具有這樣屬性的方法稱作失敗原子性 (failure atomic)。Atomic 有時是相當重要的,例如:A 轉帳給 B,正當 B 收到後錢進入帳戶,但 A 的錢還沒從帳戶扣款,這時突然跳電,系統發現轉帳問題,就必須將 A 及 B 的帳戶回復到轉帳前的狀態,並顯示轉帳失敗。
以下幾種方法能達到失敗原子性,
- 不可變物件,如果執行失敗,像是生成或是更新物件失敗,但不會有不一致的情況。
- 對於可變物件要保持失敗原子性,
- 應先檢查其參數的正確性,避免顯而易見的錯誤。
- 改變程式的順序,讓會失敗的部分在會改變物件狀態前執行。
- 撰寫復原程式碼,用於持久性的數據結構下。
- 拷貝一份臨時物件,確定全部的程式皆執行成功後,再將臨時物件的資料內容複製回原本物件中。
轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/04/effective-java-76-failure-atomicity.html
沒有留言:
張貼留言