2011-08-29 67 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。

您可能發送到視圖的任何信息都可以在模型中表示。