【问题标题】:How to prevent DTO`s when using asp.net MVC with domain services将 asp.net MVC 与域服务一起使用时如何防止 DTO
【发布时间】:2015-12-27 10:52:25
【问题描述】:
我有存储库和服务。这些服务要么编排多个存储库调用,要么执行一些与存储库调用合并的内存数据逻辑,以便我想要返回 DTO。这些 DTO 然后为 UI 完美修剪。但是......我使用 asp.net mvc,我的服务会将 DTO 返回到我应该需要视图模型的 mvc 控制器。但是我的 DTO 已经几乎和 ViewModel 一样了。唯一的例外是我的 DTO 没有 Validation 属性,因为它确实属于视图模型。
如果同时使用 DTO 和视图模型似乎很多,我还能做什么?
【问题讨论】:
标签:
c#
asp.net-mvc
repository
service-layer
【解决方案1】:
您可以考虑以下一些选项。
您可以根据您的要求和应用程序的规模在选项之间进行权衡:
- 您可以使用对象-对象映射器,例如AutoMappper
- 您可以将 DTO 传递给 ViewModel 的构造函数。
- 您可以使用 ViewModel 的公共静态方法从 DTO 创建 ViewModel 的实例。
- 在您的 ViewModel 中,您可以从 DTO 继承并使用元数据类来验证属性,然后使用
[MetadadaType(typoef(YourMetadataClass))] 装饰您的 ViewModel 类
- 您可以将您的 DTO 用作 ViewModel 和类似之前的选项,使用元数据类来验证属性,然后使用
[MetadadaType(typoef(YourMetadataClass))] 装饰您的 ViewModel 类
我还假设您的 DTO 位于与您的服务库不同的 dll 中。