Должен ли я наследовать модели в моей модели представления или использовать свойство для модели - PullRequest
1 голос
/ 13 января 2012

У меня есть несколько шаблонов электронной почты, и в каждом шаблоне у меня есть верхний и нижний колонтитулы, которые имеют одинаковую информацию.

Верхний и нижний колонтитулы представлены 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 Ответ

2 голосов
/ 13 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...