2013-10-01 63 views
2

我有一個適度的應用程序,我開始創建一個域層,我定義我的POCO對象,然後我創建了一個數據訪問層,堅持這些域對象數據庫使用EF Code First。現在我需要一個UI到這個項目,我已經創建了一個MVC 4項目,我需要創建一個強類型的視圖,所以我需要一個模型傳遞給視圖。在哪裏添加註釋在ASP.Net MVC 4與POCO對象的應用程序

我的問題是我需要在模型文件夾中重新創建我的域對象,以便我可以向它們添加數據註釋。例如,我有一個客戶

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public int RetailerId { get; set; } 
    public string CustomerName { get; set; } 
    public string CustomerEmail { get; set; } 
    public int PointsBalance { get; set; } 
    public decimal CashBalance { get; set; } 

    public ICollection<LoyaltyCard> LoyaltyCards { get; set; } 
    public virtual Retailer BusinessName { get; set; } 
} 

而且零售商對象,像這樣:

public class Retailer 
    { 
     public int RetailerId { get; set; } 
     public string BusinessName { get; set; } 
     public string EmailsAddress { get; set; } 
     public int PhoneNumber { get; set; } 
     public ICollection<Location> BusinessLocations { get; set; } 
     public ICollection<Reward> Rewards { get; set; } 
     public Industry Industry { get; set; } 
    } 

我應該添加註釋領域層我目前的域對象 - 如果我這樣做,它是沒有違反使域對象POCO對象的目標。還是應該在Model文件夾中重新創建我的域對象? - 這不會是重複的。如果您有任何指示,請讓我知道。

回答

3

您不應該重新創建他們,而應該創建模型,只包含您需要的字段,這樣您可以添加您的註釋給他們。

你說它是重複的,但實際上它是分離關注。用戶界面知道你的POCOs越少越好(在理想的世界中,你的用戶界面甚至不會知道他們,他們會通過一些業務邏輯層/ API檢索模型的實例。

例如,看看下面的CustomerViewModel,注意這裏有一些屬性丟失了嗎?我知道這是一個粗略的例子,但是當你添加一個新客戶/顯示他們時你可能並不想輸入所有的屬性,所以這裏有一個修剪版本的理想選擇爲此:

public class CustomerViewModel 
{ 
    [Required] 
    public int CustomerId { get; set; } 

    [Required] 
    public int RetailerId { get; set; } 

    [Required] 
    public string CustomerName { get; set; } 

    [Required] 
    public string CustomerEmail { get; set; } 
} 
2

這是的ViewModels進來點這些模型用來在一個視圖中顯示來自您的域模型的數據,但只包含你需要顯示視圖屬性你。可以將數據註釋添加到這些將處理驗證的屬性中。

我建議使用AutoMapper將您的域模型映射到ViewModels。

+0

謝謝,讓我checkout Automapper。視圖模型類可以在ASP.Net的默認模型文件夾內創建?還是我需要創建ViewModel文件夾? –

+1

@ValOkafor功能上它並不重要,你把它們放在哪裏。我認爲最好創建一個ViewModels文件夾,如果你在Models文件夾中有你的域模型,但是如果你在不同的程序集中有域模型,那麼Models文件夾就好了。 –

相關問題