2011-08-29 33 views
0

我正在学习使用MVC 3框架,但我在理解一些概念时遇到了一些问题。我问这个问题,因为我想了解,我们找到了“互联网应用模板” 产生在AccountModels.cs在RegisterModel文件中的代码:模型是否需要在MVC3中镜像数据库?

 [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [DataType(DataType.Password)] 
     [Display(Name = "Confirm password")] 
     [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
     public string ConfirmPassword { get; set; } 

很明显,你不会有密码和ConfirmPassword你的数据库中的字段,你只需要一个密码字段。那么,为什么这个模型不能镜像数据库呢?我错过了什么?

回答

4

这是一个视图模型,而不是一个模型。视图模型不应该镜像任何数据库。视图模型甚至不知道数据库是什么。视图模型是您为了满足特定视图的要求而设计的。这是一个控制器操作传递给视图的类。

在谈论模型时,我们通常会谈论域模型或域实体。这些符合您的业务需求。

因此,这里的一个控制器的动作的通常流量:

  1. 它获取来自服务层
  2. 它映射/本领域模型转换成视图模型
  3. 它通过视域模型模型视图

和周围的其他方法:

  1. 它需要一个视图模型从一个视图
  2. 它映射/这个视图模型转换回域模型
  3. 它传递域模型到服务层进行处理

所以单个域模型可以有多个视图模型表示。单视图模型可以映射到多个域模型。

+1

我有一些单词。 ViewModel是查看模型。这意味着视图需要哪些数据以及哪种类型。因此,它使视图与特定类型绑定,称为强类型视图。为什么我们使用ViewModel?我们将会具有智能,符合时间类型检查和验证。这非常简单直接。 – dohaivu

1

模型不必与数据库匹配。通常,您将拥有数据库表模型,但也有模型,其中包含与特定页面相关的信息(称为MVC中的View),例如登录页面。

模型可以包含这两个;代表数据库表并查看特定信息。这些有时被称为ViewModels。

您可能发送到视图的任何信息都可以在模型中表示。