私は次のクラスを持っています:
class AggregateRoot
{
// Defines common properties, Id, Version, etc.
}
class Container : AggregateRoot
{
public IEnumerable<User> Users { get; }
public void AddUser(User newUser)
{
// ...
}
// ...
}
class User
{
public void AddNotification(Notification newNotification)
{
// ...
}
// ...
}
class Notification
{
public string Message { get; set; }
}
ご覧のとおり、1 人以上のユーザーを含むコンテナーがあり、各ユーザーは 0 個以上の通知を送信できます。
このシナリオで最も一般的な操作は、新しい通知を追加することなので、ユーザーを頻繁に取得します。コンテナーからユーザーを取得することは可能ですが、その場合、コンテナー オブジェクトを取得して、ユーザー コレクションを検索する必要があります。コンテナが非常に小さくて新しい場合は問題ありません。しかし、コンテナが古くなるにつれて、より多くのユーザーを獲得します。そのため、Users コレクションは非常に大きくなる可能性があります。私の問題は、User クラスが疑似集約ルートであり、User に対して多くの操作が行われますが、User は Container の外に存在できないことです。ユーザーを格納する新しいリポジトリで明らかなパフォーマンスの問題を解決すると、別の問題が発生します。ユーザー リポジトリ内のユーザーとコンテナ内のユーザーの同期を維持するにはどうすればよいですか?
ユーザー ID だけをコンテナー クラスに格納することもできますが、特定のプロパティを参照できなくなるため、新しいユーザーをコンテナーに追加する際のビジネス ロジックが不要になります。それで、どうすればいいですか?
イベントを保存するためにMongoDbを使用しています。