mom*_*ilo 5 java domain-driven-design hibernate
public class AggregateRoot {
private Integer id;
private Set<Child> children;
}
public class Child {
private Integer id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
想象一下,您需要保存Child他的 ID 并将其发送到某个外部系统。在 DDD 中,您将使用与此类似的代码保存孩子:
AggregateRoot aggregateRoot = aggregateRootRepository.getById(id);
Child child = new Child();
child.setName("Sun");
aggregateRoot.addChild(child);
aggregateRootRepository.save(aggregateRoot);
externalService.postSavedChildId(child.getId());
Run Code Online (Sandbox Code Playgroud)
当然child.getId()会返回 null 因为它不在持久化上下文中。知道如何在 DDD 中处理这种情况吗?
你的情况有两个问题,我将分别解决:
DDD 建议聚合根带有全局 ID,而“内部”实体 ID 仅具有本地意义。因此,您不应单独公开内部 ID,因为它不会唯一寻址实体。
由于您遇到的原因,使用 DB 生成的 ID 不适合 DDD。最好的方法通常是使用生成的随机 ID。此答案包含有关该主题的更多信息。
通过阅读您的问题,我的印象是您采取了一种以 DB 为中心的方法(使用 DB 生成的 ID 是一种迹象)。使用 DDD 时,尽量先关注领域模型,然后围绕它构建数据库基础设施。