在MVC模式中使用ViewModel是否可以接受

时间:2013-08-17 08:50:28

标签: asp.net-mvc asp.net-mvc-viewmodel

我最近使用MVC框架(ASP.NET MVC)完成了一个项目。该项目使用单独的DTO类由控制器传递给View。该模型几乎远离了视图。这在MVVM中的VM和我的DTO之间形成了一个内涵。对该项目的回顾性思考表明,如果没有DTO,我就无法做到(因为我的模型非常适用于应用程序层,并且由于安全原因无法传递给Web Tier)。

所以这是我的问题 - VM(View Model)在MVC中是必需的吗?是否存在控制器将Model直接传递给View的生产应用程序?

2 个答案:

答案 0 :(得分:3)

  

视图模型的目的非常简单 - 它是一个具体的模型   设计用于视图。 它在域顶部提供简化的界面   使视图中的决策制定最小化的模型

- “ASP.NET MVC 4 In Action”

  

当您有许多不同的值传递给视图时,您可以获得相同的灵活性   快速添加新条目,或重命名现有条目,成为你最大的敌人。你留在你的   拥有跟踪项目名称和值;你没有得到Microsoft IntelliSense和编译器的帮助。   处理软件复杂性的唯一可靠方法是通过适当的设计。因此,为每个视图定义对象模型可帮助您跟踪视图真正需要的内容。我建议你定义一个   您添加到应用程序的每个视图的视图模型类

- Dino Esposito编写的“Microsoft ASP.NET MVC编程”

在每个ASP.NET MVC教程和书中,作者都​​认为ViewModel是必要的。根据我的经验,没有ViewModels,我的项目变得僵硬和脆弱;所以,我强烈建议您在项目中使用ViewModels。

答案 1 :(得分:1)

考虑是否有员工表

EmpID
Fname
Lname
DeptID
DesigID
Email
Phone

所以,如果你有一个代表这个表的类。您可以将其视为要查看的模型。 EF将为您提供列表,您可以在视图中显示。

  1. ViewModels有助于实现一些业务需求。假设您需要将名称显示为First + Last,因此每次需要进行连接时,您都可以拥有一个返回值的属性。
  2. 我们也可以使用数据注释来进行基本验证。
  3. 我们可以在不同的地方重复使用它,不需要创建匿名类,这些类在开始时很容易,但在4-5个月后很难维护。
  4. 同时在转换为JSON等时,我们可以避免传递实体信息。考虑您需要显示(使用json)仅具有电子邮件ID且没有任何视图模型的员工,因此我们需要序列化整个列表,其中包括不需要共享的个人联系号码。
  5. 你也可以有包装类。您需要在出勤时显示员工详细信息,您需要联合两个表并创建一个维护成本非常高的匿名类。
  6. 所以我相信使用View Models而不是直接将EF对象传递给视图

    是一个很好的做法