Я бы предложил, чтобы модель вида соответствовала полям, отображаемым в виде.Если позднее поле будет удалено из представления, оно также будет удалено из модели домена.
В этом случае, если ваше представление должно отображать следующие поля:
- StudentFirstName
- StudentDOB
- ParentFirstName
- ParentDOB
Тогда я бы предложил следующий вид:
public class PersonViewModel
{
public int StudentPersonID { get; set; }
[Required]
public string StudentFirstName { get; set; }
[Required]
public DateTime StudentDOB { get; set; }
public int ParentPersonID { get; set; }
[Required]
public string ParentFirstName { get; set; }
public DateTime ParentDOB { get; set; }
}
Или, если вместо этого у вас есть 2 отдельных представления, отображаются:
- StudentFirstName
- StudentDOB
И отображение:
- ParentFirstName
- ParentDOB
Тогда я бы предложил иметь 2 отдельные модели вида:
public class StudentViewModel
{
public int StudentPersonID { get; set; }
[Required]
public string StudentFirstName { get; set; }
[Required]
public DateTime StudentDOB { get; set; }
}
public class ParentViewModel
{
public int ParentPersonID { get; set; }
[Required]
public string ParentFirstName { get; set; }
public DateTime ParentDOB { get; set; }
}
Использование моделей вида таким образом позволит вам использовать [Обязательно] аннотации данных для полей, которые требуют их, а не пытаются создать обходной путь.Обратите внимание, что модели представлений не следует путать с моделями доменов, и поэтому эти данные необходимо будет сопоставить с моделью доменов.
Надеюсь, это поможет.
Если ваше приложениепростое приложение, вам может не потребоваться создание отдельного слоя бизнес-логики, и большинство книг представляют MVC только с простыми моделями, которые могут подойти.Однако, если вы будете искать вокруг, вы найдете другие примеры, где разработчики рекомендуют иметь модель представления отдельно от бизнес-модели, такую как this
Я также рекомендовал бы прочитать Wrox Professional Enterprise.Чистый 2009 , где главы 7 и 8 дают отличные примеры бизнес-уровня с обсуждением шаблона сценария транзакции, шаблона активной записи и модели доменной модели.