asp.net-mvc – 将DTO转换为ViewModel的位置?
|
我继承了一个MVC2项目,使用了一个漂亮的标准和妥善保存的DDD模式.在整个DTO / ViewModel辩论中,我一直在做很多阅读. 目前,我们的DTO通常用于ViewModels.诚然,我们正在做的事情并没有什么变化,但是当我们升级网站时,我想使用适当的ViewModels. 这是我的问题: 我们的“领域”项目的模型目前持有实体并将DTO返回给我的控制器.现在我需要将该DTO映射到ViewModel.我该怎么办? >在控制器中? 我将ViewModels与我们的“Web”项目中的视图保持一致,所以转换DTO感觉错误 – > ViewModel在域项目中.在控制器中也觉得错误. 别人做了什么? 编辑: This question/answer 建议在控制器中处理它.肯定会很容易想到这一点. 解决方法DTO通常是技术特定的.例如在.NET世界中,您的DTO可能使用DataContract和DataMember序列化属性进行装饰.此外,DTO与返回它们的服务一起构成了一个适用于 hexagonal architecture的域的适配器.它们将您的域调整到特定的传输技术,如HTTP,并且它们居住在您的域外.换句话说,域不应该知道DTO – DTO应该在一个单独的项目中定义.包含服务的项目应具有将域对象映射到DTO的映射代码.ASP.NET MVC项目本质上类似,它将您的服务/ DTO(或域对象直接)适应于演示技术,特别是HTML.因此,DTO不应该意识到ViewModels.相反,MVC控制器应该调用DTO和ViewModels之间的映射.这可以通过各种方式完成,但是我发现最有效的是在ViewModel中接受DTO的构造函数.此外,在控制器动作保证创建要发送回服务的DTO的情况下,ViewModel可以包含基于ViewModel创建DTO的方法.它包含最接近实际数据的ViewModel中的所有映射代码 – 一个information expert pattern的一个实例.另一种实现此方法的方法是使用像AutoMapper这样的方法,它使用基于约定的映射来避免样板代码.除了我以外,除了要求之外,我会考虑过度杀戮. 在许多情况下,您的ViewModel最终看起来像DTO,但使用ASP.NET MVC具体的绑定和验证属性.尽管这似乎违反了DRY,但这些都是独立的责任. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.Net httpruntime executionTimeout不工作(而且debug =
- asp.net – 如何停止所有cassini实例?
- asp.net-mvc-4 – ASP.NET MVC 4应用程序捆绑和分类,为什么
- ASP.NET Core / MVC 6 ViewModel中的依赖注入(DI)
- ASP.NET System.Data.EntityClient连接字符串帮助
- asp.net-mvc – 在ASP.NET MVC中指定只读会话
- asp.net-mvc-4 – ModelBinder和子模型
- asp.net – 使用Entity Framework的仓库模式(mvc storefron
- asp.net-mvc – 在部署MVC 2 Web应用程序时要绝对检查的事项
- asp.net-mvc – 用于货币格式的ASP.NET MVC数据注释
- asp.net – LINQ to SQL – 你的DataContext在哪
- VS 2015 CTP 6 Nuget Package Source
- asp.net-mvc – 使URL特定于(通过路由)
- asp.net-mvc – 具有引导Navbar的MVC – 将所选项
- asp.net – 在asp:Button中包装文本
- asp.net – 是否有相当于mod_pagespeed Apache模
- asp.net-mvc – 如何在RegularExpression中忽略大
- asp.net – 如何使用Excel服务器端?
- asp.net-mvc-4 – 创建和编辑MVC4的相同视图
- asp.net-mvc – 如何从运行时的强类型列表框架视
