マネームーブメントのための明示的ステートマシンの設計 ノート

マネームーブメントのための明示的ステートマシンの設計

決済システムは、しばしば保留中、成功、失敗といったシンプルなステータスカラムから始まります。製品が進化するにつれて、よりニュアンスのある状態が現れ、ステータスフィールドは信頼できなくなります。明示的なステートマシンは、決済ライフサイクルを明確にし、強制することで、ステータスがビジネスの進捗を反映することを保証します。有用な状態は、システムの知識と有効な次のアクションを示すべきであり、遷移は意図的であるべきです。例えば、保留中はコミットメントがないことを意味し、処理中はアクティブな履行を意味し、完了は満たされた義務を意味します。失敗、キャンセル、期限切れは、不成功の結果または終了したアクションウィンドウを表し、紛争中は調査のために通常のルールを一時停止します。遷移ルールはドメインレイヤーに配置されるべきであり、エンドポイントはステータスを直接割り当てるのではなく、状態変更を要求するべきです。完了またはキャンセルといった終端状態は、遅延したイベントによる再オープンに対する強力な保護が必要です。台帳の更新や顧客への通知といった副作用は、一貫性を維持するために遷移によって調整されるべきです。期限切れは、UIタイマーではなく、バックエンドによって状態遷移として管理されるべきです。バックグラウンドワーカーは、遅延した成功との競合状態を回避するために、トランザクションを期限切れにする前に状態を再確認する必要があります。リンクされたトランザクションは、ライフサイクルを管理し、重複したアクションを防ぐために単一の権威が必要です。一般的な更新時間以上の意味のあるタイムスタンプを保持することは、運用上の洞察と紛争解決のために非常に重要です。最終的に、トランザクションステータスはビジネスの真実を表すべきであり、前提条件を強制し、効果を調整する名前付き遷移を通じてのみ変更されるべきです。