我应该在视图模型中继承模型还是使用模型的属性

时间:2012-01-12 20:26:34

标签: asp.net-mvc-3

我有一些电子邮件模板,在每个模板中我都有一个页眉和页脚,它们都共享相同的信息。

页眉和页脚由EmailModel.cs

表示
public class EmailModel
{
    public string CompanyName { get { return ConfigurationManager.AppSettings["CompanyName"]; } }
    public string PhoneNumber { get { return ConfigurationManager.AppSettings["PhoneNumber"]; } }
    public string FacebookUrl { get { return ConfigurationManager.AppSettings["FacebookUrl"]; } }
    public string TwitterUrl { get { return ConfigurationManager.AppSettings["TwitterUrl"]; } }
    public string YouTubeUrl { get { return ConfigurationManager.AppSettings["YouTubeUrl"]; } }
    //Additional methods for sending these templates as emails
}

现在,对于特定的电子邮件模板,我有一个视图模型。NewSignUpEmailViewModel.cs

我应该这样做:

public class NewSignUpEmailViewModel : EmailModel
{
    public string FirstName { get; set; }
    public string CompanyName { get; set; }
    public string UserName { get; set; }
    public Guid UserId { get; set; }
}

或者这个:

public class NewSignUpEmailViewModel
{
    public EmailModel Email {get; set;}
    public string FirstName { get; set; }
    public string CompanyName { get; set; }
    public string UserName { get; set; }
    public Guid UserId { get; set; }
}

我只是以电子邮件为例,每个人都有利弊吗?

我唯一能看到的是,在某些情况下,您将遇到重复的属性名称问题。

1 个答案:

答案 0 :(得分:2)

组合通常比继承更受欢迎,但两者都有它们的位置。一个好的经验法则是确定对象之间是否存在“is-a”或“has-a”关系。如果对象1将对象2作为组件,那么组合绝对是可行的方法。

作为一个例子,让我们稍微改变一下你的数据模型:

public class SocialLinks
{
    public string FacebookUrl { get; set; }
    public string TwitterUrl { get; set; }
    public string YouTubeUrl { get; set; }
}

public class User 
{
    public SocialLinks links { get; set; }
    public string Name { get; set; }
    // and so on
}

在此示例中,显然用户具有社交网络链接,而不是用户是SocialLinks类的专用版本。希望有所帮助!