暗黙的ロック
原文: https://www.martinfowler.com/eaaCatalog/implicitLock.html
by David Rice
フレームワークやレイヤのスーパタイプのコードでオフラインロックができるようにする
解説の全文は『PofEAA』 449 ページを参照。
ロッキングスキームのカギは使う上でのギャップがないということだ。ロックを得るためのコードを1行書き忘れると、オフラインロッキングスキームが全く役に立たなくなる。他のトランザクションがライトロックをかけているとリードロックの検索の失敗は、すなわち最新のセッションデータが取得できていないかもしれない、ということを意味している。あるバージョンカウントを正しく使えなかったら、誰かの変更に知らずに上書きしてしまうかもしれない。一般に、ある要素がどこかでロックされていたら、どこでもロックされているはずなのだ。アプリケーションのロッキング戦略を無視すると不整合のデータを生成するビジネストランザクションを許してしまう。ロックをリリースしなければレコードデータを崩してしまうことはないだろうが、結局は生産性を悪くしてしまうだろう。オフラインの並行性制御はテストするのが困難なので、このようなエラーはあなたのテストパターンでは発見できないかもしれない。
これについての解決策の1つは、開発者がこのようなミスを犯さないようにすることだ。見逃すことのできないロッキングタスクは開発者によって明示的にではなく、アプリケーションによって暗黙的に扱われるべきなのだ。ほとんどのエンタープライズアプリケーションではフレームワーク、レイヤスーパタイプ(475)、コード生成の組み合わせが使われるという事実により、暗黙的なロックを利用する機会は十分にあるのだ。
ChangeLog
- translated by money@andore.com