バス通信におけるコマンドとイベントの違いは、私には少し曖昧に思えます。コマンドは1回だけ実行する必要があることを知っていますが、イベントは複数回処理できますが、コマンドまたはイベントをいつ使用するかはわかりません。
例を見てみましょう:
新しいユーザーがWebアプリケーションに登録するときに、彼にアカウントを作成し、確認メールを送信する必要があります。
アカウントを作成する -これはCreateUserCommand
、バスにを送信して、専用のコンポーネントに処理させるための適切な場所のようです。
または、これは非同期バス通信で実装するべきではありませんか?ユーザーがすぐにアプリケーションにログインできるようにしたいと考えています。バスでは、コマンドがいつ実行されるかは保証されません。
メールの送信 -コンポーネントがアカウントを作成した後、2つの可能性を確認できます
- バスに別のコマンドを送信します
SendConfirmationEmailCommand
- イベントを公開する
UserAccountCreatedEvent
そして、電子メール送信コンポーネントがそれを取得し、それを仕事にします。
一方では、確認メールを1回だけ送信したい(コマンドを使用する)一方で、新しく登録したユーザーに関係するコンポーネントが複数存在する可能性があると考えています。ロガーまたはSMS送信者。
どのように実装しますか?