76.障害原子性(failure atomicity)が達成できるよう努めるべし
- オブジェクトに対してメソッド呼び出しをして、エラーを出力した後でも、そのオブジェクトがメソッド呼び出し前と同じ状態にある。このような特性をfailure atomicという。
- immutableオブジェクトのメソッド呼び出しであれば、自ずとfailure atomicityが実現できる。
- mutableオブジェクトのメソッド呼び出しにおいて、極力failure atomicity とするための方法は以下。
- オペレーション実行前にバリデーションチェックを入れる。(状態が変わる前にエラーにさせる)
- 状態を変えるオペレーションの実行前に演算を行う。例えば、TreeMap の put であれば、実際にMapに加える前にソート処理が走り、そこでComparableでないものだったら落とされる。
- 一時的なコピーを作成して、そのコピーに対して処理をしていき、最後に該当のコンテンツに代入するようにする。これは性能面でも有効。
- 処理の最中で失敗するようなことがあれば、ロールバックするようにして、オペレーション開始前の状態に戻す。
- failure atomicityを満たせない場合は、エラーが起きた場合にどのような状態が残るのか、ドキュメントに残しておくことが理想。