Подтвердить что ты не робот

Flat vs Вложенные классы ViewModel в ASP.NET MVC

Я ищу несколько мнений по двум различным подходам к определению ViewModel

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

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

Для представлений "Создать и редактировать" мне нужен список стран для заполнения списка 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, так как он избавляет меня от определения полей во второй раз, но я хочу открыть его для улучшения подходов и комментариев.

Спасибо

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

IMHO, HTH.