【发布时间】:2020-08-18 19:59:33
【问题描述】:
从我在线阅读的内容来看,从数据库加载时的聚合必须处于完整状态。这意味着它必须有权访问其中也从数据库加载的所有实体,以便聚合永远不会处于无效/不完整状态。
如果聚合包含一个可能有数百万个实体的实体,例如。 Aggregate A 包含 Entity B 和 Entity C。现在最坏的情况是,Aggregate A 下最多可以有 100 个Entity B 实例,但Aggregate A 下可能有数百万(如果不是数十亿)Entity C。
用例:
用例是我想使用 Id 从Aggregate A 中删除Entity C 的一个特定实例。要以DDD 方式执行此操作,我必须首先从数据库中加载Aggregate A 并将其所有实体加载到内存中。然后可以使用以下方法删除该项目:
public class AggregateA extends AbstractAggregateRoot<AggregateA>{
private String aggregateId;
private Map<String, EntityC> entityC;
public void removeEntityC(String idToRemove) {
this.entityC.remove(idToRemove);
registerEvent(new EntityCRemoved(aggregateId, idToRemove));
}
}
问题:
将数百万个实体加载到内存中以针对单个请求执行任何Write Operation (Command in CQRS) 似乎不是正确的方法。
我错过了什么吗?
【问题讨论】:
标签: java domain-driven-design ddd-repositories