表示层和应用层的DTO定义

DTO definition in presentation layer and application layer

我正在学习 DDD,我想说一下使用 DDD 原则实现 DTO 的正确方法是什么?

在我的洋葱架构中,我在表示层中实现了第一个 DTO 定义,以在 RabbitMQViewModel(表示层)和 RabbitMQModelsResultDTO(应用层)之间映射数据。

并且我在应用层 (RabbitMQModelsResultDTO) 和域层(实体 LogRabbitMQ)之间实现了第二个 DTO 定义。

但是,我不确定这是否是实现两个 DTO 定义的好方法?

我的 DTO 定义的简单描述 表示层:

CreateMap<RabbitMQViewModel, RabbitMQModelsResultDTO>().ReverseMap();

和应用层:

 CreateMap<Domain.Entities.LogRabbitMQ, RabbitMQModelsDTO>().ReverseMap();

这是我项目架构的截图:

将表示对象 (RabbitMQViewModel) 转换为应用程序对象 (RabbitMQModelsResultDTO),然后将应用程序对象转换为域对象 (LogRabbitMQ) 被认为是 DDD 世界中的一种良好实践。

然而,进行乏味的、扁平的翻译是没有意义的:在所有三个层中使用同一个对象会容易得多(在这种情况下 DDD 变得无关紧要)。

以下是如何以 DDD 方式完成的:

  1. 应用程序对象反映域上下文属性,即值对象,表示对象的原语被转换成这些属性。
  2. 域对象是一个“智能”对象,使用所有 OOP 好东西实现以始终保持一致,并且该对象是使用应用程序对象的属性构造的。

至于“DTO”这个词,应该主要用于表示对象。在被视为业务对象的 application/domain 对象的上下文中使用它不太合适。