お客様へのトランザクションメールの送信を処理するシステムを開発しています。これがその仕組みです:
注文のライフサイクル中にイベントが発生します(例:「出荷済み」)
このイベントは、データベース(電子メールキュー)に電子メールの作成をトリガーします
別のWindowsサービスが、送信する新しい電子メールについてdbテーブルをポーリングしています。見つかった場合は、必要なすべてのデータを使用してWebサービスを呼び出します。電子メールの実際の送信を処理するのはWebサービスの責任です。
私の質問はステップ2に関連しています。電子メールトリガーイベントが発生した場合、サービスに必要なすべてのデータのスナップショットを取得する必要がありますか(それによってデータを複製し、新しいテーブルを導入します)、またはトランザクションデータベーステーブルから必要なデータを取得する必要があります。 Webサービスを呼び出す準備ができた時点。
[注:私は電子メールの本文にはまったく関心がありません。私がしているのは、データをWebサービスに渡すことだけです。メールテンプレートなどは別のシステムで処理されます。私の懸念は、純粋に電子メール通知をキューに入れ、必要なデータをWebサービスに渡すことです。]
トリガーの時点で値を記録し、それらをメール送信者に渡します。そうすれば、メールの内容は一貫したものになります。
例を拡張すると、注文は「出荷済み」の状態になり、電子メールはキューに入れられます。メールが送信される前に、お客様はキャンセルします。注文は「キャンセル済み」の状態になりました。これでメールが送信されます。その内容は「お客様各位、ご注文は「キャンセル」され、9月5日に発送されます」とはどうなりますか?それは、その後変更された注文の確認を得るよりも許されません。