【问题标题】:MVC ViewModel approaches and mapping. Best approachMVC ViewModel 方法和映射。最佳方法
【发布时间】:2013-01-31 10:05:30
【问题描述】:

我一直在研究使用 MVC 解决批量分配问题以及以正确方式做事的不同方法。

到目前为止,我认为最好的两种方法如下:(我也看过 AutoMapper)

1:Value Injecter - 这似乎做得很好,但也依赖于第三方库

2:使用 UpdateModel 方法并绑定到视图模型接口,该接口公开了域模型中所需属性的子集。 http://www.codethinked.com/easy-and-safe-model-binding-in-aspnet-mvc

在我使用上述实践之一开始编写整个应用程序(无需花费一周时间来找出我真正喜欢哪个)之前,是否有人有使用这两种方法的实际经验以及你使用哪种方法会推荐吗?

【问题讨论】:

  • 这似乎是一个主观问题 - 请查看faq
  • 感谢您的帮助

标签: asp.net-mvc automapper mass-assignment valueinjecter


【解决方案1】:

在只有文本字段与字符串/int 属性匹配的简单场景中,任何事情都可以做到。

但是当视图模型上的属性与模型中的对象(数据库中的 FK)匹配时,它会变得有点复杂,您可能需要从数据库中提取数据以获取某些单独的道具并映射该对象的某些属性到 ViewModel,诸如此类。

prodinner asp.net mvc 演示应用在 Mapper 类中使用 valueinjecter,有一个 pdf 解释了这种方法,你可以在这里下载:http://prodinner.codeplex.com/

【讨论】:

    【解决方案2】:

    我对这个主题所做的所有阅读的普遍共识是,如果您要从实体或域模型(从您的数据库)到视图模型以显示在表单上,​​请随意使用自动化工具,例如AutoMapper 或任何您喜欢的自动化工具。

    但是,如果您要从输入或表单模型(通过自动模型绑定填充的对象)返回到您的实体或域模型,请不要自动执行此操作。正确导航是一个滑坡,并且可能导致您的自动化工具映射到不希望/不允许的字段。我所读到的所有内容(以及我自己的各种实现)都表明最好的做法是手动/显式地执行此操作。它非常简单,对象初始化器可以使它非常容易阅读。

    var person = new Person()
    {
        PersonId = model.PersonId,
        FirstName = model.FirstName,
        LastName= model.LastName
    }
    
    personService.UpdatePerson(person);
    

    类似的东西。

    【讨论】:

      猜你喜欢
      • 2013-04-14
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      相关资源
      最近更新 更多