Приложение внешне похоже на TodoList: пользователь добавляет элементы в список, всё сохраняется на моём сервере.
Отличие от TodoMVC: элементы списка представляют объекты с Третьего сервиса («ТС»), откуда берутся их полные названия. Я храню только id.
При загрузке с моего сервера в клиент приходит список id. Сразу же надо отправить запросы на ТС, чтобы по этим id получить их
названия и показывать не «id12345», а «Длинное название» в списке.
У ТС есть свои ограничения на частоту запросов в секунду
M и возможность группировать запросы в пачки, не более, чем
N. При начальной загрузке списка из 100 элементов, я не могу отправить 100 параллельных ajax запросов в сервис, а только 1 и постараюсь разбить 100 в пачки по 25 и отправлять, замечая время, не более 3 запросов в секунду.
Делаю на Backbone.JS. Реализовал, как мне кажется, довольно велосипедно. Модель элемента списка, если ещё не имеет полного
названия, отправляет свой id и свой callback в некий общий диспетчер, который группирует и выстраивает в очередь пачки запросов, и следит за временем запросов к ТС, притормаживая при необходимости. Этот же диспетчер выполняет роль кэша, запоминая все имеющиеся пары (id: название), если они повторно понадобятся в других местах приложения.
Раньше делал похожее на
React +
Baobab. Суть та же: ветка в Baobab хранит «словарь» для всех загруженных, и некий объект занимается очередью/пачкованием задач.
Кажется, для такой ситуации должен быть какой-то более красивый и четкий паттерн – подскажите?