【问题标题】:Can someone explain why use ViewModels in MVC3?有人可以解释为什么在 MVC3 中使用 ViewModels 吗?
【发布时间】:2012-02-11 14:31:42
【问题描述】:

在研究 MVC 3 架构时,我一直看到的一件事是将模型分解到自己的项目中并将其称为 ViewModels 的概念。

在编写代码时,我很难意识到这样做有什么好处。有人能解释一下这样做有什么好处吗?

【问题讨论】:

  • 你是在问为什么要使用 ViewModels,或者为什么要将 ViewModels 放到自己的项目中?

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


【解决方案1】:

我不确定你认为 View 模型应该在他们自己的项目中。通常不是这样。

业务模型通常位于单独的项目中,数据模型也是如此,但视图模型通常位于它们所属的 Web 项目中,因为它们是表示层的一部分。

【讨论】:

  • 回答问题的唯一答案。
  • 好吧,除了我的。但是这个更直接。
  • 我也不确定我从哪里得到这个想法,因此为什么它对我没有意义。谢谢大家的回答!
【解决方案2】:

因为 MVC 的一大特点是关注点分离。您应该创建一个 ViewModel,它只包含您的 View 需要的数据,没有逻辑。

您可以,但不需要,一个单独的项目(例如:数据访问层)

一个ViewModel只是一个简单的POCO类(Plain Old CLR Object,一个只有属性,没有逻辑的类)

更多信息

【讨论】:

  • 对,但是为什么要把它放在一个单独的项目中而不是放在 MVC 应用程序中呢?
  • 不,您不需要单独的项目。您应该加载数据并将其分配给一个包含视图所需数据的简单类。
  • 这看起来是一个好的开始:rachelappel.com/…。也许在某些情况下是正确的,但并不适用于所有情况。实际上,这足以成为一个答案。
  • @MrBoJangles 谢谢,我的回答已扩展
【解决方案3】:

ViewModel 用于定制模型以供特定视图使用。当您想将特定信息传递给 View 或检索特定信息时,您将构建一个 ViewModel。

ViewModel 的一个例子是:

public class PersonViewModel
{
    public Person NewPerson { get ; set ; }
    public Address NewAddress { get ; set ; }
    public SelectList Suffixes { get ; set ; }
}

如果您有一个创建新人员的视图,您可以将这个 ViewModel 类传递给它,该类是专门为新人员视图而设计的。

【讨论】:

  • 对,但是为什么要把它放在一个单独的项目中而不是放在 MVC 应用程序中呢?
  • @Scottie 如果你愿意,你可以分开你的 ViewModel。那是个人喜好和应用程序的结构。与您的控制器、模型和视图一样,ViewModel 可以存在于 MVC 项目中。
【解决方案4】:

视图模型是 UI 层的一部分,因此它们通常应该保留在同一个项目中。

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 2012-12-27
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多