Скажем, у нас есть следующий (слишком простой) сценарий:
У нас есть экран для просмотра сведений о человеке и экран для редактирования сведений о человеке.
Сведения о человеке на экране имеют следующие поля (только для отображения):
Имя
Фамилия
Bio
На экране редактирования сведений о человеке отображаются следующие поля (в элементах управления вводом):
ID (скрыто)
Имя
Фамилия
Bio
Скажем, наша модель отображения выглядит следующим образом:
public class DisplayPersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Bio { get; set; }
}
И наша правка редактирования выглядит так:
public class EditPersonViewModel
{
[Required]
public int ID { get; set; }
[Required]
[StringLength(20)]
public string FirstName { get; set; }
[Required]
[StringLength(20)]
public string LastName { get; set; }
[Required]
public string Bio { get; set; }
}
Не так много различий между двумя, а? Модель редактирования имеет одно дополнительное поле (ID) и некоторые атрибуты в свойствах. Теперь, если бы мы объединили 2 как это:
public class DisplayPersonViewModel
{
[Required]
[StringLength(20)]
public string FirstName { get; set; }
[Required]
[StringLength(20)]
public string LastName { get; set; }
[Required]
public string Bio { get; set; }
}
public class EditPersonViewModel : DisplayPersonViewModel
{
[Required]
public int ID { get; set; }
}
Это, безусловно, более СУХОЙ, поскольку у нас нет дублирующих полей для обслуживания, но теперь у нас есть посторонняя информация (атрибуты) в нашей модели отображения. Я все больше склоняюсь ко второму подходу, потому что на некоторых наших экранах более 25 полей! (... и это вне моего контроля, поэтому, пожалуйста, не говорите об этом :) ...) Однако я просто хочу услышать мнения, чтобы лучше понять, что может быть "наилучшей практикой".