【问题标题】:DTO definition in presentation layer and application layer表示层和应用层的DTO定义
【发布时间】:2021-11-08 21:25:55
【问题描述】:

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

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

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

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

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

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

和应用层:

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

这是我的项目架构的屏幕:

【问题讨论】:

    标签: asp.net-core domain-driven-design layer dto onion-architecture


    【解决方案1】:

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

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

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

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

    至于术语“DTO”,它应该主要用于表示对象。在被视为业务对象的应用程序/域对象的上下文中使用它不太合适。

    【讨论】:

    • 好的,谢谢帮忙,我去看看
    猜你喜欢
    • 2011-04-26
    • 2010-11-26
    • 1970-01-01
    • 2019-09-02
    • 2015-07-17
    • 2014-03-24
    • 2011-10-16
    • 2012-12-20
    • 2011-05-15
    相关资源
    最近更新 更多