現在作成しているプログラムで、
・条件に従ってデータを加工
・加工したデータから、新たな条件となる情報を取得
・加工したデータを、仮のデータとして登録していいのか判定
・条件に従って次のデータを加工
・加工した次のデータから、新たな条件となる情報を取得
・加工した次のデータを、仮のデータとして登録していいのか判定
というように、処理を繰り返すロジックを作成しています。
「仮のデータとして登録していいのか判定」を行って、「登録してよければ」データを登録します。
ここまでは簡単で、よくある話です。
問題は、「登録してよくなければ」関連するデータを含めて一定の時点までデータを元に戻さなければななりません。
元に戻すとなれば、
- 仮データを確定データを用意して、必要に応じて仮データの参照/更新を行い、確定データの参照を行うようにプログラミングする。確定できて初めて、仮データを確定データに反映する。
- 確定データと確定コピーデータを用意して、確定データの参照/更新を行い、データを戻さなければならなくなったら、更新した確定データを、確定コピーデータからコピーして元に戻す。
など、どうすればいいのかと考えていました。
下手にロジックを考えるより、丸ごと戻した方が手早い
処理のロジックを考えつつ、「登録してよくなければ」が発生した場合、どういう方法を選んでも、結構大変だなと思っていました。
そんな中、こちらの記事に書いたように、思いつきを得られました。
ajya.hatenablog.jp
どんな思いつきかというと、データを丸ごとバックアップしておいて、確定データを戻さなければならなくなったら、バックアップから確定データに戻してしまうというものです。
データベースのトランザクション処理で、コミットすればすべてのデータベースに対する挿入/更新/削除が保存されますが、ロールバックすれば全てなかった状態になります。
ja.wikipedia.org
同じように処理すれば、「登録してよくなければ」が発生した場合は、バックアップから確定データに丸ごとコピーして、元の状態を復元できます。
この思いつきがあったおかげで、ロジックを作成する手間が随分減らせました。
最初から思いつければよかったのでしょうが、いろいろ考えたおかげでやっと思いつけたのだと思います。
次に似たような状況になったときは、最初から思いつけるようになるでしょう。