Мне удалось установить проект Breeze.Sharp ToDo. Я заметил поведение при добавлении нового элемента списка дел. Когда добавляется новый элемент todo, клиент выполняет серверный вызов SaveChanges, и элемент успешно добавляется. Клиент снова должен вызвать сервер с помощью QueryAllTodos, чтобы снова получить последний список. Зачем нужен этот кругосветный рейс? Разве метод SaveChanges не должен объединять изменения (новый список после добавления) со списком клиентов, чтобы избежать повторного обхода?
Обратный путь в примере проекта Breeze.Sharp ToDo
Ответы (1)
Ты прав. Нет реальной необходимости повторно запрашивать после сохранения, ЕСЛИ не существует какого-либо другого «побочного эффекта» на стороне сервера (скажем, триггера), который также изменяет данные. Этот код просто перестраховывается.
person
Jay Traband
schedule
16.07.2014
Поскольку вы упомянули о побочном эффекте, правильно ли Breeze.Sharp справляется с проблемой параллелизма? Например, при сохранении заказа триггер вычисляет стоимость доставки отдельной позиции заказа и немедленно сохраняет ее в той же таблице. Другой пример: два пользователя обновляют одни и те же сведения о клиенте. Когда один пользователь А сохраняет сведения о клиенте, другой пользователь Б уже сохранил свои изменения, поэтому данные о клиенте пользователя А устаревают и возникает проблема параллелизма.
- person wonderful world; 17.07.2014
Если вы определили столбцы параллелизма в своей модели, breeze всегда будет проверять их при каждом обновлении, которое он выполняет, и будет вызывать исключение параллелизма, если объект был обновлен другим процессом.
- person Jay Traband; 17.07.2014
Повторный запрос не является строго необходимым. Он включен отчасти потому, что для приложений Todo традиционно повторно запрашивать после сохранения, а отчасти для получения дополнительных изменений, которые могли быть сделаны каким-либо другим пользователем. Это мое оправдание, и я придерживаюсь его. :-)
- person Ward; 17.07.2014