Domain driven design DDD-应实现哪一层DTO
我正在学习DDD,如果我的问题太天真,我深表歉意。我认为我需要使用本地数据传输对象,以便向用户显示数据,因为许多属性不是任何实体/值对象的一部分 然而,我不确定这个DTO应该在哪里实现——在域层还是在应用程序服务层。DTO实现似乎是域的一部分,但这意味着当我在服务层中创建DTO集合并将其传递给表示层时,我必须在表示层中引用域层,这似乎是错误的Domain driven design DDD-应实现哪一层DTO,domain-driven-design,implementation,layer,dto,Domain Driven Design,Implementation,Layer,Dto,我正在学习DDD,如果我的问题太天真,我深表歉意。我认为我需要使用本地数据传输对象,以便向用户显示数据,因为许多属性不是任何实体/值对象的一部分 然而,我不确定这个DTO应该在哪里实现——在域层还是在应用程序服务层。DTO实现似乎是域的一部分,但这意味着当我在服务层中创建DTO集合并将其传递给表示层时,我必须在表示层中引用域层,这似乎是错误的 使用DDD原则实现DTO的正确方法是什么?将DTO定义为值来源所在的层 相对于OP的问题:将DTO放置在应用程序服务层中。DTO是该层的一个输出,如果您在
使用DDD原则实现DTO的正确方法是什么?将DTO定义为值来源所在的层 相对于OP的问题:将DTO放置在应用程序服务层中。DTO是该层的一个输出,如果您在那里定义它,它是有意义的。不要将DTO放在域层中。域层不关心将事物映射到服务于外部层(域不知道自己的世界之外有一个世界) 表示层(靠近消费者)
- 这可能是你的Api
- 具有自己的模型或Dto定义,并具有与其层相关的属性。如果这是一个Api,那么Models/DTO具有用于格式化或数据类型验证的属性
- 这是“应用程序根”(意味着它必须同时引用域服务层和数据/基础设施层才能注入服务)
- 在ApplicationService.Dto和Presentation.Dto之间映射数据
- 有自己的Dto定义,可以在不公开域实体的情况下返回数据
- 表示层和域层之间的桥梁
- 包含应用程序服务。有关应用程序服务的详细定义,请参见答案
- 域实体
- 可能包含桥接基础架构层的接口,用业务部门能够理解的词语定义,不受技术术语的限制(例如:IExcelReport、iGoogle HeetReport、IRepository)
- 可能包含“域服务”
- 数据库基础设施(映射)
- Excel库,如果将此层定义为基础结构代码
- 邮件或通知服务
- PDF输出文件
DTO和域是不同的层。
因此,它需要从一个映射到另一个,通常在所谓的应用程序服务层中完成。
请阅读以下文章,以更深入地了解DTO和分层:
- 域模型应该易于更改。这意味着不在外部公开域对象,因为有外部依赖项会使它们很难更改(而不会破坏它们)
- 应用层是外部访问点。它定义了域模型上的用例。这意味着不从其他地方操作域模型。表示层只能通过应用层。没有人喜欢处理许多不同的访问点李>