2

コマンド/イベントメッセージに関するメタデータをcqrsソリューションにどのように組み込んでいるかを知りたいと思います。たとえば、誰が、いつ、どのホストなどがコマンドを生成したかを知りたいです。これらをメッセージ自体に入れたくありません。

Webアプリで、ユーザーがショッピングカートを作成したとしますCreateShoppingCart { CartID, UserID }。次に、それにアイテムを追加しましたAddItem { CartID, ItemID, Amount, etc }。使用者が「カートに追加」ボタンをクリックしたときに正確に記録したい。

  1. これをいくつかのDictionary<string, object> Headers { get; set; }プロパティに追加できます。そのプロパティはBaseMessageクラスにある可能性があります。
  2. メッセージングフレームワーク(NServiceBusなど)に依存して、このデータをメッセージコンテキストのメッセージヘッダーに追加できます。
  3. この情報については、別のコマンドを送信してください。のようなものLogCommandDetails { CommandID: 'id of AddItem command', DateTime, Some other meta data }。このコマンドが処理されると、ItemAddedイベントのプロジェクションを更新し、このデータをプロジェクションに追加できます。

あなたの考えは何ですか?

ありがとう

4

1 に答える 1

2

通常、この情報はオプション2のメッセージヘッダーに保存されます。これはまさにメッセージヘッダーの目的です。メッセージングフレームワークの観点からのメッセージと、メッセージングフレームワークのメッセージの本文であるドメイン内のメッセージとの間には微妙な違いがあることに注意してください。

ただし、データとは何か、メタデータとは何かを見分けるのは難しい場合があります。とりわけ、日付でこの問題に遭遇します。たとえば、タイムスタンプはイベントメタデータまたは適切なドメインデータに関連付けられていますか?特定のビジネスロジックの実行にタイムスタンプが必要な場合はどうなりますか?あなたの例では、報告または監査の目的で日付を記録する必要がありますか、それともドメインが機能するために必要な日付ですか?前者の場合はヘッダーを使用し、後者の場合はメッセージ本文に日付を配置します。

于 2012-11-27T20:11:55.667 に答える