まず、私はあなたがそれを単純化し過ぎているとは思わない。それは単純な概念です。
コマンドは、アプリケーションに何かを指示します。
イベントは、あなたが何かしたことを世界に知らせるものです。
あなたのアプリケーションが(ビジネスルールまたはその他の理由により)実行するように指示されたことを実行できない場合は、実行しません。そして、何も発表しません。それが何かをしたら、それはイベントを通してそれを発表する。
イベントに登録されている人が気になる場合は、そのイベントのデータでアプリケーションを更新できます。
実際には、これは一般に、読んだモデルがイベントにサブスクライブし、それに応じて更新されることを意味します。
ユーザーを作成します。ユーザーに関する情報を含むUser_CreateCommandを発行します。コマンドハンドラは新しいオブジェクトを作成し、そのオブジェクトはユーザであり、リポジトリに保存します。ユーザーを作成すると、読み込みモデルによって処理されるUser_CreatedEventが発生し、読み込みモデルが更新されます。他のリッスンしているシステムでも、自分自身を更新できます。
少し勉強する部分は、あなたのユーザーをリポジトリに保存すると、思ったように実際にユーザーオブジェクトを保存していないという事実です。実際には、ユーザーに関するすべてのデータを含むUser_CreatedEventを保存しています。
後で、あなたのユーザオブジェクトが必要なときは、_repo.GetById(1)のようなものを呼び出します。
これは、そのユーザーを扱うすべてのイベントを再生し、ユーザーオブジェクトを作成します。
希望するもの: