総根の概念は、理解するまで混乱を招く可能性があることに同意します。他のほとんどの概念と同様に、数回実行して練習すると簡単になります。
集約のポイントは、 1 つまたは複数のユース ケースのコンテキストで、一部の外部オブジェクトのオブジェクト トラバーサルを簡素化することです。ビジネス要件を満たすには、どこかから始めなければなりません。また、Journal が主に必要であることがわかった場合は、実際には集計ルートにする必要があります。自明ではないほとんどのドメインでは、複数の集約ルートがあると便利です。ユースケースの開始オブジェクトについて超自然的なことは何もありません。どこかから始める必要があります。
繰り返しになりますが、ポイントはオブジェクトのトラバーサルを単純化することであり、これによりシステムが単純化されます。したがって、Journal が実際に有用な出発点である場合は、Journal へのすべての呼び出しを最初に行ってください。特定のユースケースで、タスク、お金、時間、またはその他の有用なものが必要になった場合、呼び出し元のプログラムは、Journal のみに問い合わせることでそれらのものを取得します。このユースケースでは、他のオブジェクトは Journal 集約ルートの一部です。
他のユース ケースでは、Task を開始点とする方がより自然であり、したがって有用な場合があります。そのため、Task 集約ルートもある場合があり、これはユース ケースの Journal 集約ルートと重複する可能性があります。ただし、要求を満たすためにタスクとタスクのみを要求します(呼び出し元のプログラムが知る必要がある唯一の参照になります)
もちろん、リレーショナルデータベースはリレーショナルのままにすることができます。しかし、オブジェクト モデルを進化させて、集約 (開始点オブジェクト) の観点から要求を見るようにすると、データベースからの要求がより単純になります。
ユースケースを 1 つ (または 2 つ) レイアウトし、それを実行してみてください。必要に応じて、ユース ケースのコンテキスト内で質問してください。
HTH、
ベリル