我有以下课程:
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; }
}
如您所见,我有一个包含一个或多个用户的容器,每个用户可以有零个或多个通知发送给他们。
在这种情况下,最常见的操作是添加新通知,因此我会经常检索用户。从容器中获取用户是可能的,但是我需要检索容器对象并在用户集合中搜索。如果 Container 很小而且很新,这很好。但随着容器变老,它会获得更多用户。所以用户集合可以变得相当大。我的问题是 User 类是一个伪聚合根,很多操作都是在 User 上完成的,但是 User 不能存在于 Container 之外。使用存储用户的新存储库解决明显的性能问题带来了另一个问题。如何使用户存储库中的用户与容器中的用户保持同步?
我可以只将用户 ID 存储在 Container 类中,但这会带走将新用户添加到 Container 的业务逻辑,因为我不能再查找某些属性。那么,我该怎么做呢?
我正在使用 MongoDb 来存储事件。