純粋なDDDパラダイムからCQRSに移行しています。私の現在の関心事は、イベントソーシング、より具体的にはイベントストアの組織化です。私はたくさんのブログ投稿を読みましたが、それでもいくつかのことを理解できません。だから私が間違っているなら私を訂正してください。
各イベントは基本的に次のもので構成されます。-イベントの日付/時刻-イベントのタイプ(これからAggregateRootのタイプも把握できます)-AggregateRoot id(Guid)-AggregateRootバージョン(更新の順序を維持するため)-イベントデータ(一部更新に必要なデータを含むシリアル化されたクラス)
これで、イベントデータが単純な値型(int、strings、enumsなど)で構成されている場合、それは簡単です。しかし、別のAggregateRootを渡す必要がある場合はどうなりますか?AR全体をイベントデータの一部としてシリアル化することはできません(すべてのデータと遅延読み込みを考えてください)。基本的には、そのARのIDを保存するだけで済みます。ただし、そのイベントを適用する必要がある場合は、最初にデータベースからそのARを取得する必要があります。そして、私のドメインモデル(リポジトリを呼び出してAR IDを操作する)からそうするのは正しくないと感じています。
このための最良のアプローチは何ですか?
ps具体的な例として、タスクエンティティとユーザーエンティティ(両方のAR)で構成されるモデルがあると仮定します。タスクは、責任のあるユーザーへの参照を保持します。ただし、責任のあるユーザーは変更できます。
更新: 混乱の原因を見つけたと思います。イベントソーシングは、読み取りモデルの構築にのみ使用する必要があると思います。この場合、IDと生データを渡すことは問題ありません。ただし、アグリゲート自体で使用されるのと同じイベント。そして、これは理解できません。