C#-DDD:数据属于哪一层?

C#-DDD:数据属于哪一层?,c#,domain-driven-design,C#,Domain Driven Design,我是DDD概念的新手,我正试图设计一个严格遵循DDD和Prism(WPF)的解决方案结构。 我正在堆叠创建DTO项目(数据传输对象)的位置。据我所知,DDD将有4个通用层: 介绍 应用 领域 基础设施 那么,您能告诉我DTO项目属于哪一层吗 我曾提及: 有人告诉我们应该在服务层实现它,但我认为这是没有意义的,因为我们遵循DDD的概念,我们没有所谓的服务层 非常感谢你 关于一般来说,组件代码的位置应该位于该组件所有者之外。所有者完全控制其组件。这一想法遵循了传统 那么,在您的情况下,谁是DTO的

我是DDD概念的新手,我正试图设计一个严格遵循DDD和Prism(WPF)的解决方案结构。 我正在堆叠创建DTO项目(数据传输对象)的位置。据我所知,DDD将有4个通用层:

介绍

应用

领域

基础设施

那么,您能告诉我DTO项目属于哪一层吗


我曾提及: 有人告诉我们应该在服务层实现它,但我认为这是没有意义的,因为我们遵循DDD的概念,我们没有所谓的服务层

非常感谢你


关于

一般来说,组件代码的位置应该位于该组件所有者之外。所有者完全控制其组件。这一想法遵循了传统

那么,在您的情况下,谁是DTO的所有者?谁控制该DTO的结构和用途


但是,使用DDD(在任何体系结构中!)时,您都应该考虑域代码不应该依赖于基础结构、应用程序或UI代码。因此,如果您决定将DTO类放入应用层,那么您不能从域代码中引用该DTO(即域实体或域服务不能引用DTO类-无
import
use
指令或
new
语句)

您可能会被我的回答所困扰,但我必须再次重申:

领域驱动设计与层无关。它是关于领域设计

域是您的问题空间。这是您的用户所需要的。这是你的领域专家告诉你的

设计是您为解决方案建模的方式。它从你通过与领域专家交谈获得的知识开始。它继续决定什么是有界上下文以及它们如何放置在上下文映射上。然后您决定如何实现每个上下文—这是一个域模型、活动记录、CRUD还是一些现成的软件

当您决定实现时,您可以考虑内部结构,而DDD并没有规定任何内容

如果您的问题是将数据的DTO放在何处,那么,如果有多个其他项目使用它们,它们可能位于单独的项目中,或者您将它们放在DAL(这是典型的),因为您的表示层很可能直接使用它,而不涉及域模型,否则您根本不会提到DTO


关于使用术语DDD来回答您的问题,我在不久前写过,针对这个问题,您可能想阅读。

我看到我们应该在层中添加DTO类,这些类将创建它们的对象以将它们发送到另一层。 在DDD模型中,应用层和基础结构层已经可以访问域层,因此它们不需要基础结构层中的DTO,因为它将返回实体类

基于上述情况,我们需要DTO来表示应用层中从DB(通过基础结构层)检索到的数据,并使用DTO将这些数据发送到表示层,而不需要表示层访问域模型层中包含的域实体

最后,根据我的经验和使用DDD模型,我更喜欢在应用层内的单独项目中添加DTO。这意味着它属于应用层

您可以看到我的项目示例,其中的“核心层”表示“域层”


您还可以读取

DTO是用于DataTransferObject的,大多数情况下用于在层之间传输数据。有一些组件将用作layers@SirRufo谢谢,我明白了。但我不知道创建DTO项目应该使用哪一层?读这本书:@khadangtoan好吧,你有数据和某种服务来处理这些数据。用DTO类和数据服务作为接口来描述数据结构。@ConstantinGALBENU“许多DTO在层之间飞行,只是为了遵循严格的体系结构版本”我只是想弄明白为什么其他体系结构的DTO会更少。我的意思是,DTO最有可能在系统边界处独立于所选架构而被需要?