Один подход, который получает некоторую абстракцию, состоит в том, чтобы ViewModel был «составлен» из класса вашей бизнес-модели, включая другую необходимую вам информацию представления.
class MyObject
{
public int ID {get;set}
[Required]
[StringLength(512)]
public string Name {get;set;}
}
class MyViewModel // ViewModel for a specific view
{
public MyObject MyModel {get;set;} // the model that is being edited
// other data the view might need, set by the controller
public string SomeMessage { get; set; }
public List<SomeObject> SomeObjects {get;set;} /// e.g. for a drop-down list
}
Затем в представлении ссылаются на ViewModel соответственно.
@model My.Namespace.MyViewModel
Hello @model.MyModel.Name !!!
Таким образом, вы только указываете валидацию и / или аннотации данных в своем бизнес-классе в одном месте.
Если вы хотите иметь другую валидацию, тогда потребуется некоторая стратегия для выборочного применения логики валидации.