2013-03-27 114 views
3

我正在創建我的第一個MVC項目,並且對於將我的代碼優先實體類展示給我的視圖模型的正確方法感到好奇。我有一個像這樣一個實體類:使用一個或多個對象創建視圖模型

public class Product 
{ 
    public int Id { get; set; } 
    public int CategoryId { get; set; } 
    [StringLength(50)] 
    public string ProductName { get; set; } 
    public Nullable<System.DateTime> DateAdded { get; set; } 
    [StringLength(50)] 
    public string AddedBy { get; set; } 
} 

是更好的對象傳遞,或通過在一個新類中的屬性?

public class ProductViewModel 
{ 
    Product myProduct { get; set; } 
} 

public class ProductViewModel 
{ 
    public int Id { get; set; } 
    public int CategoryId { get; set; } 
    public string ProductName { get; set; } 
    public DateTime DateAdded { get; set; } 
    public string AddedBy { get; set; } 
} 
+0

由於已經給出的答案表明,這不是一個建設性的問題。一種方法在客觀上不比其他方法好。 – 2013-03-27 19:36:02

回答

1

最好還是選擇第二個選項。一般是不好的做法使用你的數據庫類作爲模型。你的第一個選擇本質上是做什麼的,除了它包裝在另一個毫無意義的類。

我想要做的是讓它們都實現一個接口,這樣如果你想改變它,只需要改變接口,那麼這兩個實例都可以改變。

public class ProductViewModel : IProduct 
{ 
    public int Id { get; set; } 
    public int CategoryId { get; set; } 
    [StringLength(50)] 
    public string ProductName { get; set; } 
    public DateTime DateAdded { get; set; } 
    [StringLength(50)] 
    public string AddedBy { get; set; } 
} 
+1

實體框架的一個優點是可以使用普通對象作爲實體。這些對象可以說是理想的模型 - 在它們之上提供一個模型層*也包括將實體包裝在「無意義」類中...... – 2013-03-27 19:34:40

+0

@DanJ然後DTO和表示層之間沒有分離。 – mattytommo 2013-03-27 19:37:06

+0

視圖模型*是DTO和表示層之間的分離。我想我們可能會以不同的方式定義「模型」。 – 2013-03-27 19:38:02

0

我肯定會去第二個選項。它提供了與您的域模型(實體)和視圖模型的明確分離。

  • 你有兩個非常不同類型的關切,以解決
    • 與域邏輯,參與管理應用程序的數據實際業務流程,您的域名交易:分離這些模型,因爲是很重要的。
    • 您的觀點主要集中在視圖邏輯,呈現一個良好的用戶界面來與數據進行交互。
  • 您可以分開您的域和界面層的開發工作。您希望最小化一個圖層中的小改動對其他圖層的影響。

當然在這個例子中它是一種微不足道的,但它會是非常重要的,因爲你建立更多的邏輯到你的視圖。

0

作爲一個整體傳遞實體類會更好。這樣,如果班級發生變化,您將不必更新ViewModel中的屬性。

相關問題