Должны ли аннотации данных содержаться в модели или модели представления? - PullRequest
11 голосов
/ 15 декабря 2010

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

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

Кстати, вот как выглядит мой черновик 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; }
}

Ответы [ 2 ]

12 голосов
/ 15 декабря 2010

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

7 голосов
/ 15 декабря 2010

Я разделяю ту же озабоченность по поводу принципа СУХОЙ и проверки, поэтому я предпочитаю сохранять большинство требований проверки в модели. Но почему это должен быть один или другой? Валидация модели принадлежит модели, но существуют определенные валидации, относящиеся к представлению, которые относятся к модели представления.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...