DDD:Dto 汇编程序应该成为域层的一部分吗?
DDD: Should a Dto Assembler be a part of Domain Layer?
提前致谢。
我在 领域层 库中有一些 聚合。此外,一些 DTOs 在一个单独的库中,它在 Server 和 Client 端之间共享。
一个实体的聚合比它的DTO更有信息量。因此,为了从 DTO 转换为 Aggregate,repository 应该通过 Dto 汇编程序。 存储库 的接口在域层 中。这就是为什么我得出结论 DtoAssembler 应该是 DomainLayer 的一部分的原因。
这样对吗?
我认为不一定。由于您使用的是分层架构,我假设您的 DTO 驻留在上层——通常是 服务层 ——充当服务器和客户端之间的通信点。事实上,DTO 的主要目的正如其名称(数据传输对象)所暗示的那样,是为了实现通信,在不附加任何逻辑的情况下传输信息 - 例如。操作。
图层应该只知道位于下面的那些,而不是上面的;因此,DTO 应该保存在服务层中,并由负责人(例如,命令处理器)使用,以便从存储库中检索域对象并执行涉及的任何操作。
底线:DTO 不适用于域,它们属于服务/通信。
不,这在 DDD 的上下文中是完全错误的。
尝试询问(非技术)领域专家他对 DTO 汇编程序的看法。他会用询问的大眼睛看着你。
DTO(以及它们的汇编程序)是一个技术概念 - 它们在系统特定接口的上下文中定义数据结构。
存储库主要是 return 聚合。如果您在数据库中查询未在您的域中建模的统计数据,那么存储库也可能 return 一个不可变的数据对象。只要确保您在执行此操作时不会意外遗漏领域概念即可。
一旦您从存储库中获得数据(无论是聚合还是数据对象),您就可以将其输入 DTO 汇编程序。
提前致谢。
我在 领域层 库中有一些 聚合。此外,一些 DTOs 在一个单独的库中,它在 Server 和 Client 端之间共享。
一个实体的聚合比它的DTO更有信息量。因此,为了从 DTO 转换为 Aggregate,repository 应该通过 Dto 汇编程序。 存储库 的接口在域层 中。这就是为什么我得出结论 DtoAssembler 应该是 DomainLayer 的一部分的原因。
这样对吗?
我认为不一定。由于您使用的是分层架构,我假设您的 DTO 驻留在上层——通常是 服务层 ——充当服务器和客户端之间的通信点。事实上,DTO 的主要目的正如其名称(数据传输对象)所暗示的那样,是为了实现通信,在不附加任何逻辑的情况下传输信息 - 例如。操作。
图层应该只知道位于下面的那些,而不是上面的;因此,DTO 应该保存在服务层中,并由负责人(例如,命令处理器)使用,以便从存储库中检索域对象并执行涉及的任何操作。
底线:DTO 不适用于域,它们属于服务/通信。
不,这在 DDD 的上下文中是完全错误的。
尝试询问(非技术)领域专家他对 DTO 汇编程序的看法。他会用询问的大眼睛看着你。
DTO(以及它们的汇编程序)是一个技术概念 - 它们在系统特定接口的上下文中定义数据结构。
存储库主要是 return 聚合。如果您在数据库中查询未在您的域中建模的统计数据,那么存储库也可能 return 一个不可变的数据对象。只要确保您在执行此操作时不会意外遗漏领域概念即可。
一旦您从存储库中获得数据(无论是聚合还是数据对象),您就可以将其输入 DTO 汇编程序。