DDD:Dto汇编器应该是域层的一部分吗?

时间:2015-11-24 14:07:41

标签: domain-driven-design implementation layer dto project-organization

提前致谢。

我在域层库中有一些聚合。此外,某些 DTO 位于单独的库中,该库在 Server Client 端共享。

实体的聚合比其 DTO 更具信息性。因此,为了从 DTO 转换为 Aggregate Dto Assembler 应该访问存储库存储库的接口位于域层中。这就是为什么我得出结论 DtoAssembler 应该是 DomainLayer 的一部分。

这是对的吗?

2 个答案:

答案 0 :(得分:7)

不,这在DDD环境中是完全错误的。

尝试向(非技术)领域专家询问他对DTO汇编程序的看法。他会以大而疑惑的眼神看着你。

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

存储库主要返回聚合。如果在数据库中查询未在域中建模的统计数据,则存储库也可能返回不可变数据对象。确保在执行此操作时不会意外遗漏域名概念。

从存储库获取数据后(无论是聚合对象还是数据对象),您都可以将其提供给DTO汇编程序。

答案 1 :(得分:1)

在我看来,不一定。由于您使用的是分层架构,我假设您的DTO位于上层 - 通常是服务层 - 充当服务器和客户端之间的通信点。实际上,DTO的主要目的就是它们的名称(数据传输对象)是为了实现通信,在没有附加任何逻辑的情况下传输信息 - 例如。操作

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

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