我应该把我的 DTO 放在干净的架构中的什么地方?

Where i should put my DTOs in clean architecture?

需要实施干净的体系结构并与 DTO 概念作斗争。据我了解,我不能在表示层 (asp mvc) 中使用我的域对象,而应该使用 DTO 或视图模型。我不确定这些 DTO 应该放在哪里。 我有两个项目作为我的核心层(域、应用程序)。域包含我的实体 ex:'Post' + 存储库接口 ex:'IPostRepository' 。应用程序持有逻辑 ex:'IPostManager' + 'PostManager'。 DTO 和映射到实体的 DTO 应该在哪里发生? Asp MVC,应用程序还是域?

这看起来像是一个应用程序。所以在那种情况下,我将我的 DTO 放置在尽可能靠近它们使用的地方。如果它是 MVC,那么我的 DTO 就在我的视图旁边:

  • 观看次数
    • 帐号
    • Index.cshtml
    • IndexModel.cs

或者如果它是 Razor Pages,那么 DTO 只是内部的 类。有关工作示例,请参阅我的 ContosoUniversity 示例:

MVC example

Razor Pages example

不是 "clean architecture" 而是 "vertical slice architecture" 但这不重要。将 类 放在它们实际使用的位置附近。

在您的例子中,Presentation 和 Domain 都访问了 DTO。最好拥有它 基础设施 并从那里引用它。

正如我们已经知道的,Dto 可以是不具有任何行为且仅用于传输数据的不同类型,例如 MVC 模式中的模型或可能以后缀命名的 class 'classNameDto'

在您的情况下,这实际上取决于您使用应用程序层的上下文。一些开发人员理解 'Application Services' 更具体到应用程序,这意味着它们与 UI 紧密相关。

如果是这种情况,那么这是放置数据映射到域模型和从域模型映射到 Dto 的好地方。

否则,如果映射是在 Web 层完成的,那么 Dtos 需要去那里。

正如@Jimmy Bogard 所说的那样简单"Put the classes close to where they're actually used."

我还建议阅读更多关于干净架构的内容,看看您是否正朝着正确的方向前进。

希望这对您有所帮助:)