Проверка данных в Silverlight 4 - Проверка уровня объекта против проверки ViewModel - PullRequest
2 голосов
/ 28 февраля 2011

Я работаю с Silverlight 4, MVVM, WCF RIA и Entity Framework.Как я знаю, существует два способа проверки данных.Сначала проверка уровня объекта , вторая запись логика проверки в ViewModel .

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

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011
Атрибуты

DataAnnotation можно применять и к ViewModel.Но проблемы все те же:

  • Бросок исключений при ошибках валидации - шум в окне вывода
  • Установка некоторого значения по умолчанию для свойства, выбрасывание исключений и установка недопустимого состояния
  • Невозможно полностью проверить модель и получить все ее ошибки.
  • Невозможно добавить или удалить ошибки в коде.

Преимущество заключается в простоте сравнения данных в сравнениидругими способами.

С другой стороны, интерфейс INotifyDataErrorInfo позволяет выполнять проверку асинхронно.Как упоминалось в другом ответе, если вы хотите проверить, существует ли уже имя пользователя в базе данных, вы можете отправить запрос в службу и добавить ошибку в пользовательский интерфейс после получения асинхронного обратного вызова.

Я предпочитаю использовать INotifyDataErrorInfo, и хотя он требует больше кода, чем аннотаций данных, его можно уменьшить, создав своего рода универсальный класс валидатора:

this.Validator = new ModelValidator<ProfileViewModel>(this);
this.Validator.AddValidationFor(() => this.SelectedCountry).NotNull().Show("Select country");
this.PropertyChanged += new PropertyChangedEventHandler(this.ValidateChangedProperty);
2 голосов
/ 28 февраля 2011

Это немного похоже на коп, но вам, вероятно, в конечном итоге понадобится выполнить оба типа проверки.

Проверка на уровне сущности полезна, поскольку вам нужно определить ее только в одном месте, и вы получите сообщения о проверке пользовательского интерфейса и проверку сущности до того, как она будет сохранена в базе данных (при условии, что данные сохраняются в БД).

Проблема в том, что проверка на уровне сущности является довольно простой, и вам, вероятно, потребуется выполнить некоторые вызовы службы для выполнения пользовательской проверки (например, мы проверяем, что пользователь существует в нашей сети для указанного имени пользователя в нашей форме создания пользователя). ). Здесь вам нужно выполнить проверку в вашей виртуальной машине.

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