У вас есть несколько вариантов для обновления пользовательского интерфейса.
Если возможно, проще, если ваш API синхронно возвращает успех / неудачу.Если вы получили ошибку, вы можете немедленно сообщить об этом пользователю, и вам не нужно обновлять интерфейс.Если вы добились успеха, у вас есть несколько вариантов.
- Включите в ответ об успехе некоторую информацию о версии объекта.Включите в модель чтения некоторую информацию о версии и опрашивайте API запросов, пока версия не станет достаточно новой.
- Включите в ответ об успехе некоторую информацию о версии объекта.Ваш API запросов позволяет вам указывать, что вы хотите, чтобы данные были как минимум той версии (в заголовке, параметре запроса или чем-то еще).Либо вы можете сделать так, чтобы API запроса немедленно возвращал ошибку, если она еще не обновлена, либо вы можете заблокировать ее до тех пор, пока она не обновится (с таймаутом), а затем вернуть обновленные данные.
- Используйте какую-либо систему уведомлений клиента, такую как веб-сокеты, чтобы уведомлять клиента всякий раз, когда прочитанная модель «подписана» на изменения.Либо уведомление может содержать информацию, которую клиент должен обновить, либо он может сделать другой запрос.
Помимо этих параметров вы также можете использовать метод оптимистических обновлений.В этом случае после выполнения соответствующих проверок на стороне клиента перед выполнением команды вы сразу же предполагаете, что команда выполнена успешно (если это тип команды, которая обычно выполняется успешно), немедленно обновите пользовательский интерфейс, используя код на стороне клиента.Затем:
- Если команда возвращается с ошибкой, отмените обновление на стороне клиента (это можно сделать, повторно загрузив модель чтения или используя код на стороне клиента).
- Если команда выполнена успешно, рассмотрите возможность повторной загрузки модели чтения, если есть вероятность, что оптимистическое обновление на стороне клиента не совсем верно.При этом следует использовать одну из перечисленных выше стратегий, чтобы убедиться, что эффект команды присутствует в модели чтения.
Это также хорошо работает при автономной поддержке - вы постоянно ставите команды в очередь на клиенте и оптимистичноПредположим, что они успешны (возможно, с помощью пользовательского интерфейса, когда вы находитесь в автономном режиме и данные устарели), используя код на стороне клиента, чтобы обновить модель чтения, пока вы не сможете фактически отправить команды на сервер и повторно получить сгенерированную сервером модель чтения.