1

データベースのトランザクションを次のように処理するのは正しいのでしょうか。

    **locate database service**
         **open connection**
              **begin transaction**
                  get objects from relational database
                  call business logic
              **commit transaction**
         **close connection**
    **release**

アスタリスクで囲まれたコードは、IoC ** を介して注入されます。

したがって、ビジネス ロジックはデータ アクセス コードの影響を受けませんが、実装が正しいかどうか、およびそれがもたらす可能性のある結果について尋ねられました。

ありがとうございました!

4

2 に答える 2

0

通常は再利用のために接続を開いたままにしておきたいデータベース サービスを見つけて接続を開くには、十分なオーバーヘッドがあります。アプリケーションで不便な場合は、接続プールでこれを行うことができます。

于 2012-08-06T15:24:34.580 に答える
0

通常、ビジネス ロジックを処理している間は、トランザクションを開いたままにしたくありません。アプリケーションは、ネットワークを介したデータの送信、リモート サービスの呼び出しなど、長時間の計算を実行する場合があります。このプロセス中にデータベース トランザクションが開かれていると、多くの問題が発生する可能性があります。それらのいくつかは、デッドロック、RDMS 接続プールの不足、ロックのエスカレーション、更新の消失などです。

一般に、リポジトリ モジュールは、トランザクション管理を含むオブジェクトのロード/永続化を担当します。ビジネス ロジックはトランザクションについて心配する必要はありません。必要なのは、Repository の正しいメソッドを呼び出す方法だけです。また、データの保存はさまざまな理由で失敗する可能性があることを忘れないでください。適切に処理してください。例えば、

1.外部ストレージからオブジェクトを読み込みます(トランザクション管理がある場合、リポジトリ内に隠されています)
2.ビジネスロジックに従ってオブジェクト
を操作します 3.操作の結果を保存します(ストレージがトランザクションをサポートするRDMSであると仮定すると、トランザクションを開始し、データを保存し、成功した場合はコミット、エラーの場合はロールバック)

于 2012-08-06T15:01:57.127 に答える