我最近完成了一个使用 MVC 框架(ASP.NET MVC)的项目。该项目使用了一个单独的 DTO 类,由控制器传递给 View。该模型几乎远离视图。这在 MVVM 中的 VM 和我的 DTO 之间绘制了一个内涵。对该项目的回顾表明,如果没有 DTO,我就无法完成(因为,我的模型非常位于应用程序层,由于安全原因不能传递到 Web 层)。
所以这是我的问题——VM(视图模型)在 MVC 中是必需的吗?是否存在控制器将模型直接传递给视图的生产应用程序?
我最近完成了一个使用 MVC 框架(ASP.NET MVC)的项目。该项目使用了一个单独的 DTO 类,由控制器传递给 View。该模型几乎远离视图。这在 MVVM 中的 VM 和我的 DTO 之间绘制了一个内涵。对该项目的回顾表明,如果没有 DTO,我就无法完成(因为,我的模型非常位于应用程序层,由于安全原因不能传递到 Web 层)。
所以这是我的问题——VM(视图模型)在 MVC 中是必需的吗?是否存在控制器将模型直接传递给视图的生产应用程序?
视图模型的目的非常简单——它是专门为在视图中使用而设计的模型。它在域模型之上提供了一个简化的界面,将视图中的决策保持在最低限度。
——《ASP.NET MVC 4 实战》
当您有数十个不同的值要传递给视图时,允许您快速添加新条目或重命名现有条目的相同灵活性将成为您最大的敌人。您只能自己跟踪项目名称和值;您无法从 Microsoft IntelliSense 和编译器获得帮助。 处理软件复杂性的唯一行之有效的方法是通过适当的设计。因此,为每个视图定义一个对象模型有助于您跟踪该视图真正需要什么。我建议您为添加到应用程序的每个视图定义一个视图模型类。
-- Dino Esposito 的“编程 Microsoft ASP.NET MVC”
在每一本 ASP.NET MVC 教程和书籍中,作者都认为 ViewModel 是必要的。根据我的经验,如果没有 ViewModel,我的项目会变得僵硬而脆弱。因此,我强烈建议您在项目中使用 ViewModel。
考虑如果你有一个员工表
EmpID
Fname
Lname
DeptID
DesigID
Email
Phone
因此,如果您将有一个类来表示此表。您可以将其视为要查看的模型。EF 将为您提供列表,您可以在视图中显示。
所以我相信使用视图模型而不是将 EF 对象直接传递给视图总是一个好习惯