DDD聚合性能

问题描述

我是 DDD 的新手。现在我有一个聚合 Team 和实体 TeamMember:

class Team {
  members: Map<TeamMemberId,TeamMember>;

  add(member) {
    assert(!members.has(member.id),"Team Member is already exists");
    this.members.set(member.id,member);
  }
}

当我执行 AddTeamMemberCommand 时,存储库将从 MongoDB 加载整个聚合。
当团队很大时,这似乎是不可接受的

我从 google 和 stackoverflow 中发现了以下内容

  • 使用 Id 引用而不是实体
  • 延迟加载
  • 重新设计聚合
  • ....

我不确定哪种解决方案适合我,或者对于这种情况是否有更好、更通用的解决方案?是否有 GitHub 示例项目我可以查看? 非常感谢。

解决方法

对于这种情况,是否有更好、更通用的解决方案?

对于读取/查询,您根本不会更改聚合,延迟加载很好。在 CQRS 的世界中,我们甚至可以避免完全加载聚合,而只是获取我们需要的信息的只读副本。


AGGREGATE 是一组关联对象,我们将其视为一个单元,以便进行数据更改。

如果我们试图对聚合进行更改,并且想要卸载一堆不必要的信息,那可能意味着我们的聚合边界位于错误的位置,并且我们应该重新设计我们的领域模型,以便加载的信息更好地满足我们的需求。

例如,如果您尝试仅更新 Bob,而不是整个团队,那么这可能暗示 Bob 不是团队聚合内的实体,而是属于不同的较小聚合,与团队有一定关系。

Mauro Servienti 的 talk on aggregate boundaries 可能是一个很好的起点。