Стандартный подход здесь состоит в том, чтобы использовать ViewModels и аннотировать их с помощью атрибутов проверки, которые применяются к уровню представления. При таком подходе вы сопоставляете свойства объекта домена со свойствами в ViewModel; библиотека, подобная AutoMapper , может действительно помочь уменьшить количество дублирующегося кода повсюду в этом отношении.
Иногда вы можете обнаружить, что все, что делает ваш ViewModel - это просто оборачивает объект домена. В этих случаях я все еще думаю, что это хорошая вещь, так как она позволяет вам добавить любую функциональность представления в ViewModel, которая специфична для модели и контекста, опция, которой у вас нет, если вы сопоставляете объект домена прямо с вид.