@rakro

Модель взаимодействия с сервером?

Есть некая сущность - например "Задача". На бэкенте есть функция(назову ее get_json), которая возвращает json(достаточно сложная структура), из которого эта сущность будет рендерится angular'ом. Над этой сущностью можно провести много различных действий, при выполнении которых сущность может сильно измениться, а следственно и ее отображение. Идея сделать так - на каждое действие над сущностью(ng-click) будет делаться запрос на http api(через сервис $http). На бэкенде будут происходить определенные операции. В ответе будет одним из полей будет результат функции get_json, которая вернет json по уже измененной сущности. Дальше я просто заменяю весь объект в $scope, который сейчас отрендерен, на новый, который пришел в ответе. Нормальная такая модель взаимодействия с сервером или это наркомания?
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Почитайте про Event Sourcing и Redux. Эти подходы подразумевают именно то что вы хотите. И да, с angular все это прекрасно дружит.

Коротко - по ngClick мы генерим действие, отправляем его на сервак и применяем действие к структурке на клиенте (оптимистичный апдейт). Ну и т.д. периодически синхронизируя все это дело.

p.s. не используйте $scope, никогда (точнее 10 раз подумайте можно ли без него обойтись).
Ответ написан
@beh
Разработчик python, javascript
Как я понял вам нужно сохранять состояние клиентского приложения на сервере, при любых действиях пользователя, чтобы потом это состояние восстановить например при обновлении страницы?
Мне кажется лучше изменения над сущностью делать на клиенте, и периодически скидывать её на сервер. Такие обновления можно делать через _.debounce, т.е. накапливать изменения в состоянии за определенное время а потом сохранять его на сервере. Если пользователь будет беспорядочно тыкать во все подряд, то каждый раз дергать сервер не оптимально, лучше дернуть один раз когда он успокоится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы