Asp.net mvc 3 2个相同性能的型号,MVC3
大家好 我刚刚开始使用MVC3,我的应用程序中有两个模型,即“页面”和“页面历史记录”,它们都具有相同的属性。除了“PageHistory”有一个称为“PageId”的额外属性,它引用“Page”模型 我的问题是,我是用正确的方式做的吗?或者我应该为此使用继承。 如果继承是一种选择,我如何处理它,任何例子都会对我有很大帮助 我的模型如下所示: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
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;}
}
我不认为继承是正确的方式,当前的结构在我看来还可以
看看您是否选择将页面作为父页面,并将页面历史记录作为从页面继承的内容,实际上,这不仅仅是页面历史记录
例如,您对继承的想法应该总是来自现实世界的实现。可能有各种各样的页面都继承自超级页面类型,而页面历史只是页面的一个属性,而不是包含属性的复杂属性 是的,我同意。我在想,我应该写同样的一组模型代码吗?因为两种模式是相同的;唯一的问题是,只有当我更改“页面”表中任何记录的值时,“页面历史记录”表才会被填充。您的思考过程正好可以减少代码,但有时多做一点也不会有什么坏处,但我还是会看看是否有机会将页面历史记录作为页面的属性,但是,如果你因为某些商业规则而得到了这样的结果,那就顺其自然吧。我知道页面历史记录在您的系统中是一种不同的类型,因为您可能只想获取页面历史记录