Asp.net mvc 3 2个相同性能的型号,MVC3

Asp.net mvc 3 2个相同性能的型号,MVC3,asp.net-mvc-3,object,inheritance,properties,mode,Asp.net Mvc 3,Object,Inheritance,Properties,Mode,大家好 我刚刚开始使用MVC3,我的应用程序中有两个模型,即“页面”和“页面历史记录”,它们都具有相同的属性。除了“PageHistory”有一个称为“PageId”的额外属性,它引用“Page”模型 我的问题是,我是用正确的方式做的吗?或者我应该为此使用继承。 如果继承是一种选择,我如何处理它,任何例子都会对我有很大帮助 我的模型如下所示: public class Page { private readonly IndianTime _g = new IndianTi

大家好

我刚刚开始使用MVC3,我的应用程序中有两个模型,即“页面”和“页面历史记录”,它们都具有相同的属性。除了“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; }
    }
公共类页面
{
private readonly indianteme _g=new indianteme();
公共网页()
{
CreatedOn=_g.DateTime;
Properties=“Published”;
Tags=“Page”;
RelativeUrl=string.Empty;
}
公共字符串路径
{
获取{return(ParentPage!=null)?ParentPage.Heading+“>>”+Heading:Heading;}
}
[关键]
公共int Id{get;set;}
[StringLength(200),必需,数据类型(DataType.Text)]
公共字符串标题{get;set;}
[StringLength(200),必需,数据类型(DataType.Text)]
公共字符串标题{get;set;}
[MaxLength,必需,数据类型(DataType.Html)]
公共字符串内容{get;set;}
[显示(名称=“参考代码”),脚手架柱(假)]
公共字符串引用代码{get;set;}
[必需]
[远程(“检查重复”、“页面”、ErrorMessage=“Url已获取”、AdditionalFields=“initialUrl”)]
公共字符串Url{get;set;}
[显示(Name=“创建于”),脚手架栏(假)]
public DateTime CreatedOn{get;set;}
//父页面对象(自引用:ParentId=>Id)
[显示(Name=“父页面”)]
public int?ParentId{get;set;}
[DisplayFormat(NullDisplayText=“Root”)]
公共虚拟页父页{get;set;}
公共虚拟ICollection子页面{get;set;}
}

我不认为继承是正确的方式,当前的结构在我看来还可以

看看您是否选择将页面作为父页面,并将页面历史记录作为从页面继承的内容,实际上,这不仅仅是页面历史记录


例如,您对继承的想法应该总是来自现实世界的实现。可能有各种各样的页面都继承自超级页面类型,而页面历史只是页面的一个属性,而不是包含属性的复杂属性

是的,我同意。我在想,我应该写同样的一组模型代码吗?因为两种模式是相同的;唯一的问题是,只有当我更改“页面”表中任何记录的值时,“页面历史记录”表才会被填充。您的思考过程正好可以减少代码,但有时多做一点也不会有什么坏处,但我还是会看看是否有机会将页面历史记录作为页面的属性,但是,如果你因为某些商业规则而得到了这样的结果,那就顺其自然吧。我知道页面历史记录在您的系统中是一种不同的类型,因为您可能只想获取页面历史记录