2012-01-12 2 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

+0

Свойство CompanyName в базовом классе представляет мою компанию, а CompanyName в модели представления представляет клиента. Я закончил переименование свойств в EmailModel с префиксом «Наш». –

+0

Возможный дубликат [ASP.NET MVC Architecture: ViewModel по составу, наследованию или дублированию?] (Http://stackoverflow.com/questions/6954102/asp-net-mvc-architecture-viewmodel-by-composition-inheritance-or -duplication) – nawfal

ответ

2

Композиция часто предпочитается над наследованием, но оба имеют свое место. Одно правильное правило состоит в том, чтобы определить, существует ли отношение «есть-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 класс. Надеюсь, это поможет!

+0

На самом деле это имеет большой смысл. Наверное, наследство было бы для Фрукты и Яблока. –

+0

Рад, что я могу помочь! –

Смежные вопросы