提前致谢。
我在域层库中有一些聚合。此外,某些 DTO 位于单独的库中,该库在 Server 和 Client 端共享。
实体的聚合比其 DTO 更具信息性。因此,为了从 DTO 转换为 Aggregate , Dto Assembler 应该访问存储库。 存储库的接口位于域层中。这就是为什么我得出结论 DtoAssembler 应该是 DomainLayer 的一部分。
这是对的吗?
答案 0 :(得分:7)
尝试向(非技术)领域专家询问他对DTO汇编程序的看法。他会以大而疑惑的眼神看着你。
DTO(以及它们的汇编程序)是一个技术概念 - 它们在系统的特定接口的上下文中定义数据结构。
存储库主要返回聚合。如果在数据库中查询未在域中建模的统计数据,则存储库也可能返回不可变数据对象。确保在执行此操作时不会意外遗漏域名概念。
从存储库获取数据后(无论是聚合对象还是数据对象),您都可以将其提供给DTO汇编程序。
答案 1 :(得分:1)
在我看来,不一定。由于您使用的是分层架构,我假设您的DTO位于上层 - 通常是服务层 - 充当服务器和客户端之间的通信点。实际上,DTO的主要目的就是它们的名称(数据传输对象)是为了实现通信,在没有附加任何逻辑的情况下传输信息 - 例如。操作
图层应该只知道位于下方而不是上方的那些;因此,DTO应该保存在服务层中并由负责任的人(例如命令处理器)使用,以便从存储库中检索域对象并执行所涉及的任何操作。
底线:DTO不适用于域,它们属于服务/通信。