2012-10-01 5 views
9

http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-youngによると、イベントパブリッシャを使用してイベントを発行するコンポーネントはリポジトリです。CQRSリポジトリがイベントストアではなくイベントを公開するのはなぜですか?

私の質問は単純です:それはなぜですか?このブログ記事で

は私たちがいることを告げています

ドメインリポジトリは、イベントを公開する責任があり、これは通常、イベント・ストアにイベントを保存するとともに、単一のトランザクション内だろう。

イベントストアのタスクとしてこれを期待していました。イベント(または複数のイベント)が保存されると、そのイベントは公開されます。

なぜそれがリポジトリにありますか?

答えて

9

ドメインモデルは、格納メカニズムを認識しません。一方、イベント・ストア、古典的なSQLストア、またはその他の永続性の手段を使用する場合でも、適切なイベントがパブリッシュされることを確認する必要があります。

イベントを公開するためにイベントストアに依存している場合は、ストレージメカニズムと密接に関連しています。

+0

を、あなたが述べたように、これらのイベントの発行はshouldn基礎となるイベントストアの責任を負うのではなく、「公開されていない」マーカーを設定している間にDBテーブルを使用してイベントを格納するという解決策です。別のプロセスに、そのテーブルから「公開されていない」とマークされたイベントを読み取り、それらのイベントを発行してから、マーカーが設定され、トランザクションがコミットされますか?この場合、未公開イベントのテーブルをポーリングしてこれを達成する方法ですか? – CraigM

2

イベントの格納とパブリッシュはアトミックな命令でなければなりません。これは、両方のアクションのいずれかが失敗した場合、このイベントのリスナーはイベントのプロデューサと同期しなくなるからです。

2pcトランザクション(2フェーズ・コミット)を使用するイベント・ストアからイベントをパブリッシュする場合と比較して、別の(より高価な)ソリューションがあります。

あなたがここにいくつかのより多くのintereting情報を見つけることができます。まだ2PCを回避しながら、イベントの保管およびそのイベントの発行は、原子操作する必要があるためhttps://cqrs.wordpress.com/documents/building-event-storage/

関連する問題