我对 DDD 相当陌生,这是我的困境:
我必须保留一个引用实体 B 的实体 A(让我们认为两者都是实体根)。UI 层通过 A_DTO(A 的 DTO 类)收集所有这些信息(在控制器处),将属性从 DTO 映射到 A 的新实例,现在为了在 A 中引用 B,UI 发送一个 id。当我在存储库后面使用 ORM 时,我想从 BRepository 查找 B 的对象实例,在我们正在构建的新 A 实例上填充引用,最后调用 ARepository.save(A instance)。
我这里有几个选择
- 在 UI 层中执行所有这些操作(在控制器或某种服务外观中)或
- 在名为 createA 的 ApplicationService 甚至是域 Service 中执行此操作。
哪个选项是正确的???。这里真正突出的是通过其 id 查找 B 以获取对 A 对象设置的引用的过程,这可以同样被认为是保持 ORM 满足或保持域模型一致的过程。围绕在 A 上设置 B 的引用的过程可能存在一些隐含的业务规则和验证,我认为这些是这里决定的驱动点。
此外,如果在创建实体的过程中编织验证,并通过特定错误说构造函数和/或设置器可以通过 UI 冒泡给客户端并有另一个,那么这里可能会进一步奇怪的音调将是验证的考虑因素通过回购的验证级别??或作为控制器中发生的明确步骤?