2012-01-12 35 views
1

我有一些电子邮件模板,每个模板中都有一个页眉和页脚,它们共享相同的信息。我应该在我的视图模型中继承模型还是为模型使用属性

页眉和页脚被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

是的,您继承时已经有CompanyName属性冲突。我个人比较喜欢构图而不是继承。 2个CompanyName属性是否代表相同的信息? – danludwig 2012-01-12 20:46:23

+0

基类中的CompanyName属性代表我的公司,视图模型中的CompanyName代表客户端。我最终重命名了EmailModel中的属性,其前缀为“Our”。 – 2012-01-12 21:02:06

+0

[ASP.NET MVC体系结构:ViewModel的组合,继承或重复?]的可能的重复?(http://stackoverflow.com/questions/6954102/asp-net-mvc-architecture-viewmodel-by-composition-inheritance-or - 复制) – nawfal 2015-01-12 20:24:22

回答

2

组合通常比继承更受欢迎,但两者都有自己的位置。一个很好的经验法则是确定您的对象之间是否存在“是-a”或“具有-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的专用版本类。希望有所帮助!

+0

其实这确实很有意义。我想继承将是像水果和苹果。 – 2012-01-12 23:32:07

+0

很高兴能帮到你! – 2012-01-13 00:08:44

相关问题