在域服务中使用 asp.net MVC 时如何防止 DTO

How to prevent DTO`s when using asp.net MVC with domain services

我有存储库和服务。这些服务要么编排多个存储库调用,要么在内存中执行一些与存储库调用合并的数据逻辑,以便我想要 return DTO。这些 DTO 然后针对 UI 进行了完美修剪。但是...我使用 asp.net mvc,我的服务将 return DTO 到我需要视图模型的 mvc 控制器。但是我的 DTO 已经几乎像 ViewModels 了。唯一的例外是我的 DTO 没有验证属性,因为它确实属于视图模型。

如果一起使用 DTO 和 viewmodels 看起来很多,我还能做什么?

您可以考虑以下选项。
您可以根据您的要求和应用程序的规模在选项之间进行权衡:

  • 您可以使用像 AutoMappper
  • 这样的对象-对象映射器
  • 您可以将 DTO 传递给 ViewModel 的构造函数。
  • 您可以使用 ViewModel 的 public 静态方法从 DTO 创建 ViewModel 的实例。
  • 在您的 ViewModel 中,您可以从 DTO 继承并使用元数据 class 作为验证属性,然后使用 [MetadadaType(typoef(YourMetadataClass))]
  • 装饰您的 ViewModel class
  • 您可以将您的 DTO 用作 ViewModel 等,之前的选项使用元数据 class 作为验证属性,然后使用 [MetadadaType(typoef(YourMetadataClass))]
  • 装饰您的 ViewModel class

此外,我假设您的 DTO 与您的服务库位于不同的 dll 中。