gpt4 book ai didi

domain-driven-design - DDD - 应该实现哪一层 DTO

转载 作者:行者123 更新时间:2023-12-03 11:16:57 25 4
gpt4 key购买 nike

如果我的问题很幼稚,我正在学习 DDD,所以很抱歉。我认为我需要使用本地数据传输对象来向用户显示数据,因为许多属性不是任何实体/值对象的一部分。

但是,我不确定这个 DTO 应该在哪里实现 - 在域层或应用程序服务层。 DTO实现似乎是Domain的一部分,但这意味着当我在Service Layer中创建DTO集合并将其传递给Presentation Layer时,我必须在Presentation Layer中引用Domain Layer,这似乎是错误的。

使用 DDD 原则实现 DTO 的正确方法是什么?

最佳答案

将 DTO 定义到值的来源所在的层。
相对于 OP 的问题:将 DTO 放入 应用服务层 . DTO 是该层的输出,如果您在那里定义它是有意义的。不要将您的 DTO 放在域层中。域层不关心映射事物以服务于外部层(域不知道在它自己之外有一个世界)。
表示层 (接近消费者)

  • 这可能是您的 API
  • 具有自己的模型或 Dto 定义,并具有相对于其层的属性。如果这是一个 API,那么模型/DTO 具有用于格式化或数据类型验证的属性
  • 这是“应用程序根”(意味着它必须同时引用域服务层、数据/基础设施层才能注入(inject)服务)
  • 在 ApplicationService.Dto 和 Presentation.Dto 之间映射数据

  • 应用服务层
  • 有 Dto 定义 它自己能够在不暴露域实体的情况下返回数据。
  • 表示层和域层之间的桥梁。
  • 包含应用程序服务。见答案https://stackoverflow.com/a/3840552/1027250有关应用程序服务的详细定义。

  • 域层
  • 域实体
  • 可能包含桥接基础设施层的接口(interface),以业务可以理解的词语定义,不受技术术语的限制(IE:IExcelReport、IGoogleSheetReport、IRepository)
  • 可能包含“域服务”

  • 数据/基础设施层 (最接近您的数据库或外部服务)
  • 数据库基础设施(映射)。
  • 如果将此层定义为基础结构代码,则为 Excel 库。
  • 邮件或通知服务。
  • PDF 输出文件
  • 关于domain-driven-design - DDD - 应该实现哪一层 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438286/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com