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, так как он избавляет меня от определения полей во второй раз, но я хочу открыть его для улучшения подходов и комментариев.
Спасибо
Ответы
Ответ 1
Я лично предпочитаю вложенный подход для презентации, потому что это приводит к более логичному дизайну при использовании частичных представлений. У вас может быть CompanyPartialView
, используемый во всем приложении, который знает, как отображать Company
, поэтому имеет смысл разоблачить Company
как вложенную структуру.
С другой стороны, простые классы ViewModel легче всего работать для ввода данных. У вас просто куча полей форм, которые все сопоставляются с отдельными свойствами. Поэтому моя стратегия обычно заключается в том, чтобы сгладить их для страниц ввода данных и вложить их в страницы презентации/отчета.
Ответ 2
Я предпочитаю вложенный, по нескольким причинам:
- Что касается объектно-ориентированного подхода.
- Если вы используете LINQ to SQL или Entities или ORM, вы можете просто передать объекты ORM и не передавать все виды свойств.
- Вы можете передавать другие представления, поэтому вы можете создавать отдельные модели для частичных представлений, и если этот вид использует частичный, вы можете передать класс модели частичного представления как свойство класса модели представления.
IMHO, HTH.