DDD:Dto 汇编程序应该成为域层的一部分吗?

DDD: Should a Dto Assembler be a part of Domain Layer?

提前致谢。

我在 领域层 库中有一些 聚合。此外,一些 DTOs 在一个单独的库中,它在 ServerClient 端之间共享。

一个实体的聚合比它的DTO更有信息量。因此,为了从 DTO 转换为 Aggregaterepository 应该通过 Dto 汇编程序存储库 的接口在域层 中。这就是为什么我得出结论 DtoAssembler 应该是 DomainLayer 的一部分的原因。

这样对吗?

我认为不一定。由于您使用的是分层架构,我假设您的 DTO 驻留在上层——通常是 服务层 ——充当服务器和客户端之间的通信点。事实上,DTO 的主要目的正如其名称(数据传输对象)所暗示的那样,是为了实现通信,在不附加任何逻辑的情况下传输信息 - 例如。操作。

图层应该只知道位于下面的那些,而不是上面的;因此,DTO 应该保存在服务层中,并由负责人(例如,命令处理器)使用,以便从存储库中检索域对象并执行涉及的任何操作。

底线:DTO 不适用于域,它们属于服务/通信。

不,这在 DDD 的上下文中是完全错误的。

尝试询问(非技术)领域专家他对 DTO 汇编程序的看法。他会用询问的大眼睛看着你。

DTO(以及它们的汇编程序)是一个技术概念 - 它们在系统特定接口的上下文中定义数据结构。

存储库主要是 return 聚合。如果您在数据库中查询未在您的域中建模的统计数据,那么存储库也可能 return 一个不可变的数据对象。只要确保您在执行此操作时不会意外遗漏领域概念即可。

一旦您从存储库中获得数据(无论是聚合还是数据对象),您就可以将其输入 DTO 汇编程序。