Отображение разбитых на страницы данных на клиенте из нескольких источников данных с сервера - PullRequest
0 голосов
/ 09 мая 2018

У нас есть 3 товара, из которых пользователь может заказать.

Например:

  • музыка Itunes
  • Книги Itunes
  • AppleStore Apps

Дано:

3 микросервиса, которые дают 3 отдельных постраничных ответа для истории заказов на основе метки времени.

Требуется:

Чтобы отобразить историю заказов из всех 3 источников в порядке убывания метки времени и разбить их на страницы как пользовательские прокрутки. то есть сортировать и объединять ответы из 3 источников на основе отметки времени и отображения.

Возможно, пользователь приобрел:

  1. Из всех 3 услуг
  2. Из любых 2
  3. Из любого 1
  4. нет

Кроме того, сроки покупки также могут быть искажены. например: Пользователь приобрел 10 песен только на музыку Itunes.

Подходы, которые я могу придумать:

1. Тяжелый груз только на клиенте:

Будет вызывать все 3 API параллельно, дождаться ответа всех API. Храните их локально.

Слияние и сортировка на основе отметки времени.

Обрезать верхние n элементов и отобразить на устройстве.

Как и когда пользователь выполняет прокрутку, он проверяет наличие локальных данных и, соответственно, вызывает API.

2. Только на стороне сервера:

Есть прокси, который будет общаться со всеми службами.

По получении запроса от клиента fetchData (noOfItems, fetchedUntilTimestamp),

прокси должен получать данные из разных источников, вызывая getData(noOfItems, fetchFromTimeStamp) для каждого из них.

Каждый источник данных должен извлекать noOfItems, начиная с отметки времени fetchFromTimeStamp и ниже, и возвращает список данных.

Прокси должен:

  1. SORTED_LIST = сортировать список данных из нескольких источников на основе Отметка времени
  2. RESULT_LIST = Первые noOfItems из SORTED_LIST
  3. fetchedUntilTimestamp = Отметка времени последнего элемента RESULT_LIST

Прокси должен возвращаться клиенту: RESULT_LIST + fetchedUntilTimeStamp

Клиент, начиная со следующего запроса, должен позвонить fetchData (noOfItems, fetchedUntilTimestamp) с fetchedUntilTimeStamp, полученным с сервера от предыдущего вызова

Какие из этих двух предпочтительнее? Есть ли лучший подход к решению этой проблемы?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Единственное преимущество Решения 1 состоит в том, что вам не нужно создавать новый фасадный сервис для вызова 3 микро сервисов. Недостатком является то, что ваш клиентский код становится гораздо более сложным, и вам придется выпустить новый клиент, если вы добавите 4-й продукт.

Решение 2 значительно упрощает работу клиента. Вы можете легко добавить 4-й товар (или удалить товар). Вы можете оптимизировать производительность на сервере лучше, чем на клиенте.

Я всегда стараюсь хранить определенные знания о бизнесе (сколько продуктов мы продаем?) Вне клиента и на сервере.

0 голосов
/ 09 мая 2018

Это зависит от вашей среды.

Если ресурс сервера дорогой, вам следует выбрать решение 1. Также обратите внимание, что сервер не нужно вызывать три раза.Соединение также является дорогостоящим ресурсом, и три соединения имеют больше исключений ветви.Сервер должен предоставлять интерфейс для возврата всех трех видов элементов.

В противном случае вам следует выбрать Решение 2. Особенно, когда есть несколько клиентов, требуется несколько разработчиков, для реализации в клиенте требуется много работы и может быть несколько ошибок.Детали реализации могут отличаться.Все это нуждается в дополнительном тесте.

Наконец, на практике решение может быть решено большим голосом.

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