2相同属性的模型,MVC3

时间:2014-03-06 06:45:27

标签: asp.net-mvc-3 object inheritance properties mode

美好的一天!

我刚刚开始使用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; }
    }

1 个答案:

答案 0 :(得分:0)

我不认为继承是正确的方式,目前的结构对我来说没问题。

看看你是否选择将Page作为父级,而Pagehistory是从Page继承的,实际上它不仅仅是简单的页面历史。

你的继承理念应该始终来自现实世界的实现,例如。可能有差异。所有页面都是从超级页面类型继承而来的,而页面历史记录只是页面的一个属性,而不是一个包含其中属性的复杂属性。