Должны ли аннотации данных отображаться на модели или модели просмотра?

Я был использован для украшения классов модели данных с атрибутами аннотации данных, но пурист во мне немного близок к включению чисто презентационных атрибутов, таких как формат отображения здесь. Тем не менее, я очень счастлив сохранить здесь атрибуты валидации. Одна хорошая причина, по которой я должен продолжать хранить все аннотации и т.д. В модели данных, заключается в том, что моя модель представления объединяет классы модели данных, например. my ViewModelBase.DetailItem<TEntity> свойство в модели представления - это просто ссылка на класс сущности в моей модели данных. Если бы я хотел перенести презентационные аннотации в модель представления, мне пришлось бы радикально пересмотреть мой проект до того, где я дублирую свойства модели данных в своей модели представления и использую инструмент сопоставления объектов для заполнения объектов модели модели на основе объектов модели данных.

Где я должен делать аннотации моих данных?

Просто BTW, вот что выглядит мой черновик ViewModelBase:

public class ViewModelBase<T>
{
    public virtual string PageTitle { get; set; }
    public virtual string ViewHeading { get; set; }

    public virtual ViewMode ViewMode { get; set; }
    public virtual IEnumerable<T> ItemList { get; set; }
    public virtual T DetailItem { get; set; }
}

Ответ 1

Я разделяю ту же самую озабоченность по поводу принципа DRY и валидации, поэтому я предпочитаю хранить большинство требований к валидации в модели. Но почему он должен быть тем или иным? Проверка модели принадлежит модели, но есть определенные проверки, относящиеся к определенному виду, которые относятся к viewmodel.

Таким образом, аннотации данных таковы: аннотации вокруг данных. Неправильная логика проверки. Логика проверки является совершенно другой концепцией аннотаций данных (обязательный атрибут - это всего лишь один аспект проверки). Мне лично трудно разместить реальную проверку в рамках реализации MVVM, поскольку для некоторой проверки требуется контекст, а не только необходимый или нет.

Короткий ответ: если он в вашей модели, то он объединяется с вашими режимами просмотра. Если существует конкретное требование вида, модель просмотра может удовлетворять дополнительным требованиям, если это необходимо.

Ответ 2

Валидация должна, по крайней мере, выполняться в модели представления, потому что это то, что вы получаете от представления. Также валидация всегда выполняется в контексте данного представления. Таким образом, у вас могут быть две разные модели представлений, соответствующие двум различным представлениям, но сопоставленные с одним классом модели, и поскольку проверка может отличаться в зависимости от представления, эта проверка должна выполняться в модели представления. Если вы выполнили проверку на модели, вам будет трудно провести различие между этими двумя случаями, потому что у вас может быть ситуация, когда свойство требуется в первом представлении, но не требуется на втором представлении. Поэтому, если вы используете аннотации данных для выполнения валидации, вы должны украсить их модель просмотра.