1

サインアップ プロセス中に、問題が発生した場合にロールバックできるように、トランザクションを使用してアカウントのセットアップに関連するすべての操作を囲みます。

発生する最後の項目は課金プロセスです。支払いが成功した場合、アカウントの作成を完了するために Commit 操作が呼び出されます。たとえば、ユーザーのカードが拒否された場合は、ロールバックします。

ただし、他のデータベース操作を保護するトランザクションによって特定の書き込み操作が「カバー」されることなく、試行された請求のログをデータベースに書き込むのが最善の方法であると考えています。これは MySQL で可能ですか? 問題のログ テーブルは他に依存していません。アプリケーションでデータを保持してロールバック操作後にデータを書き込むことは、トランザクションの使用を開始する前に作成されたレガシー支払いライブラリが原因でやや困難です。MySQLに解決策がある場合は、それを避けたいと思います。

4

1 に答える 1

2

私はその目的を念頭に置いてトランザクションを使用しません。あなたが説明する操作は、独立して存在する完全な権利を持っているようです。

たとえば、請求書にはヘッダーと 1 つ以上の行があります。トランザクションを使用して、データベースに不完全な請求書を保存しないようにします。これは、アプリケーション エラーになるためです。ビジネス ロジックには、たとえばヘッダーのない行がある状況はありません。

ただし、未確認のアカウントを持つことは、ビジネス ロジックの観点からは完全に理にかなっています。顧客はおそらく、最初からやり直すよりも、状況について通知され、別の支払い方法を提供できることを好むでしょう.

さらに、このような時間のかかるプロセスにトランザクションを使用するには、MySQL Server とのオープンな接続を維持する必要があります。HTTP インターフェイスを実装する必要がある場合は、ロジック全体を再考する必要があります。

つまり、トランザクションはアプリケーション エラーから保護するためのツールであり、ビジネス ロジックを実装するためのメカニズムではありません。

于 2013-08-28T11:12:08.563 に答える