我有一些电子邮件模板,在每个模板中我都有一个页眉和页脚,它们都共享相同的信息。
页眉和页脚由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; }
}
我只是以电子邮件为例,每个人都有利弊吗?
我唯一能看到的是,在某些情况下,您将遇到重复的属性名称问题。
答案 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类的专用版本。希望有所帮助!