Как сохранить согласованность модели при сохранении через сервис? - PullRequest
2 голосов
/ 28 декабря 2010

Я работаю в приложении клиент / сервер (WPF / WCF), используя шаблон MVVM.

Свойства в ViewModel привязаны к свойствам в модели, так что при изменении модели это изменение немедленно распространяется в View.

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

Как мне управлять редактированием и сохранением свойств пользователя? Вот что я хочу, чтобы произошло:

  1. Пользователь нажимает кнопку «Редактировать»
  2. Пользователь изменяет значения в текстовых полях
  3. Пользователь нажимает «Сохранить»
  4. Изменения отправляются на сервер
  5. В случае успеха сервер возвращает обновленный элемент, который объединяется в Модель и пользовательский интерфейс обновлены.
  6. В случае неудачи сервер возвращает ошибку, а модель не обновляется.

Похоже, что при использовании MVVM Модель обновляется на шаге 3 (делая избыточными шаги 5 и 6), и если на сервере происходит ошибка, данные на клиенте становятся несовместимыми с сервером.

Есть ли лучший способ справиться с этой ситуацией?

Ответы [ 3 ]

0 голосов
/ 06 января 2011

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

0 голосов
/ 06 января 2011

Решение, которое я нашел, заключается в создании второго набора объектов - ModelUpdates.

Когда пользователь нажимает Редактировать , объект ModelUpdate (который имеет те же свойства, что иСоздается объект модели), и DataContext переключается на этот объект.

Когда пользователь нажимает Сохранить , сведения об объекте ModelUpdate отправляются в службу.Служба сообщает подробности об обновленном объекте, которые затем объединяются с хранилищем модели.

Это означает, что модель обновляется только с данными, которые были успешно сохранены.Если объект был сохранен неправильно, версия базы данных будет отправлена ​​обратно клиенту.Если при сохранении произошла ошибка, версия базы данных будет отправлена ​​обратно клиенту.Если сервер недоступен, клиент сохранит предварительно отредактированную версию.

0 голосов
/ 28 декабря 2010

Я думаю, что следует использовать метод синхронной записи.
Таким образом, при возникновении ошибки модель и сторона обзора совпадают. Кроме того, ваше представление не будет обновлено до тех пор, пока оно не вернет сохраненные данные.

Простыми словами:

1) Редактирование кликов пользователя
2) Пользователь вносит изменения
3) Пользователь нажимает сохранить
3.1) Приложение присваивает данные модели
3.2) Модель сохраняет изменения
3.3) Модель возвращает измененные данные
4) Просмотрите изменения с сообщением об успешном завершении (измененные данные) или ошибке.

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