Плоские и вложенные классы ViewModel в ASP.NET MVC - PullRequest
31 голосов
/ 10 февраля 2010

Мне нужны мнения о двух разных подходах к определению ViewModel

У меня есть класс компании

public class Company
{
    public string Name { get; set; }
    public int CountryID { get; set; }
}

Для представлений Create и Edit мне нужен список стран для заполнения DropDownList для выбора CountryID. Я вижу два варианта выбора структуры ViewModel, которые подробно описаны ниже.

Вложенная ViewModel

public class CompanyCreateEditViewModel
{
    public Company Company { get; set; }
    public IEnumerable<Country> Countries{ get; set; }
....
}

Flat ViewModel

public class CompanyCreateEditViewModel
{
    public string Name { get; set; }
    public int CountryID { get; set; }
    public IEnumerable<Country> Countries{ get; set; }
....
}

В настоящее время я отдаю предпочтение подходу Nested, поскольку он избавляет меня от определения полей во второй раз, но я хочу открыть его для улучшения подходов и комментариев.

Спасибо

Ответы [ 2 ]

24 голосов
/ 10 февраля 2010

Лично я предпочитаю вложенный подход к представлению, потому что он ведет к более логичному дизайну при использовании частичных представлений.Вы можете использовать CompanyPartialView во всем приложении, которое знает, как отобразить Company, поэтому имеет смысл представить Company как вложенную структуру.Плоские классы ViewModel наиболее удобны для работы с данными entry .У вас просто есть куча полей формы, которые отображаются на отдельные свойства.Поэтому моя стратегия обычно сводить их к страницам ввода данных и вкладывать их в страницы презентаций / отчетов.

5 голосов
/ 10 февраля 2010

Я предпочитаю вложенный, по нескольким причинам:

  • Вот что такое объектно-ориентированный.
  • Если вы используете LINQ to SQL или Entities, или ORM, вы можете просто передать объекты ORM и не обязательно передавать все виды свойств.
  • Вы можете передавать другие представления, чтобы создавать отдельные модели для частичных представлений, и, если это представление использует частичное, вы можете передавать класс модели частичного представления как свойство класса модели представления.

ИМХО, ХТХ.

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