2014-03-06 64 views
0

美好的一天傢伙!2個相同屬性的型號,MVC3

我剛開始使用MVC3,我的應用程序中有2個模型,即「Page」和「PageHistory」都具有相同的屬性。除了「PageHistory」有一個名爲「PageId」的額外屬性,它引用了「Page」模型。

我的問題是我正確的做法嗎?或者我應該爲此使用繼承。 如果繼承是一個選項,我該如何處理這個問題,任何例子都會幫助我很多。

我的模型看起來像如下:

public class Page 
    { 
     private readonly IndianTime _g = new IndianTime(); 

     public Page() 
     { 
      CreatedOn = _g.DateTime; 
      Properties = "Published"; 
      Tags = "Page"; 
      RelativeUrl = string.Empty; 
     } 

     public string Path 
     { 
      get { return (ParentPage != null) ? ParentPage.Heading + " >> " + Heading : Heading; } 
     } 

     [Key] 
     public int Id { get; set; } 

     [StringLength(200), Required, DataType(DataType.Text)] 
     public string Title { get; set; } 

     [StringLength(200), Required, DataType(DataType.Text)] 
     public string Heading { get; set; } 

     [MaxLength, Required, DataType(DataType.Html)] 
     public string Content { get; set; } 

     [Display(Name = "Reference Code"), ScaffoldColumn(false)] 
     public string ReferenceCode { get; set; } 

     [Required] 
     [Remote("CheckDuplicate", "Page", ErrorMessage = "Url has already taken", AdditionalFields = "initialUrl")] 
     public string Url { get; set; } 


     [Display(Name = "Created On"), ScaffoldColumn(false)] 
     public DateTime CreatedOn { get; set; } 

     //Parent Page Object (Self Reference: ParentId = > Id) 
     [Display(Name = "Parent Page")] 
     public int? ParentId { get; set; } 

     [DisplayFormat(NullDisplayText = "Root")] 
     public virtual Page ParentPage { get; set; } 

     public virtual ICollection<Page> ChildPages { get; set; } 
    } 

回答

0

我不認爲繼承將是正確的方式,目前的結構看起來不錯給我。

看看您是否選擇將頁面設爲父頁面,將頁面歷史設置爲從頁面繼承,實際上它不僅僅是簡單的頁面歷史記錄。

你的繼承理念應該始終來自現實世界的實現,例如。可能會有差異。各種頁面都從超級頁面類型繼承,而頁面歷史只是頁面的一個屬性,而不是一個包含屬性的複雜屬性。

+0

是的,我同意。我在想什麼,我應該寫一組相同的模型代碼嗎?因爲兩種模型都是一樣的;唯一的事情是「PageHistory」表格只有當我改變「Page」表格中的任何記錄的值時纔會被填充。 –

+0

你的思維過程是恰當的,以減少代碼,但有時多一點它不會受到傷害,但我仍然會看到是否有機會使PageHistory成爲Page屬性,但如果你擁有它這是由於一些商業規則讓它成爲現實。我明白,頁面歷史記錄在您的系統中是相當不同的類型,因爲您可能只想獲取頁面歷史記錄 –