Стратегии эффективного извлечения данных с сервера - PullRequest
0 голосов
/ 03 апреля 2011

У меня есть клиентское приложение на основе Flex, которое «общается» с серверной частью через BlazeDS. В одном из моих сценариев использования будет так называемое представление «Фотостена», в котором будет представлен ряд самых последних фотографий, присланных от людей и для мест, за которыми следит пользователь (в стиле Facebook).

Дело в том, что данные на этой фотостене должны быть отфильтрованы по «Все», что означает отсутствие фильтра, «Друзья», означающие друзей, за которыми пользователь следит, и «Места», означающие местоположения, за которыми следует пользователь.

Следующие три подхода гудят в моей голове

Если я получу данные с сервера только один раз (когда по умолчанию выбран фильтр ВСЕ), я сохраню их локально, и в следующий раз, когда пользователь нажмет на фильтр, эта локальная коллекция будет отфильтрована локально. Проблема в том, что я не могу предсказать, сколько из всех недавних фотографий пришло от друзей, а сколько - из разных мест, поэтому я могу получить страницу, которая показывает только одну фотографию, где всегда должно присутствовать минимум 5 фотографий. , Я явно не хочу иметь дело с частичной загрузкой и тому подобными вещами.

Другой способ - сначала сделать два отдельных запроса к серверу: один для получения коллекции недавних фотографий от друзей, а другой для определения местоположения. Таким образом я сделаю так, чтобы у меня был минимум фотографий для отфильтрованных страниц. Когда данные поступят, клиент объединит эти две коллекции, отсортировав их по дате, и вуаля будет коллекция «ALL» (конечно, повторяющиеся фотографии должны быть удалены при объединении)

В-третьих, сделать то же самое на уровне сервера, сделав два отдельных запроса, а затем объединить их.

Это обычная ситуация, я знаю, но, тем не менее, я должен как-то с этим справиться. В общем, пожалуйста, предложите хорошие независимые от сервера стратегии для извлечения данных.

1 Ответ

0 голосов
/ 04 апреля 2011

На мой взгляд, лучший способ - подумать о вашем приложении с точки зрения дизайна, управляемого данными. У вас точно должно быть 3 запроса, чтобы получить все фотографии, фотографии друзей и фотографии с соответствующей страницей. С точки зрения взаимодействия клиент-сервер не так дорого передавать один и тот же объект домена с описанием изображения дважды или трижды. Просто помните, что AMF - это компактный двоичный формат. И вы можете положиться на кеш браузера для изображений или даже можете кэшировать растровые данные на стороне клиента, если это необходимо.

С точки зрения сервера у вас будет 3 сервисных метода с 3 запросами к БД. И нет необходимости объединять ВСЕ изображения на сервере, используя два других запроса. Получение всех записей из БД будет намного дешевле, чем два запроса с дополнительными критериями, а затем объединение их в коде Java.

И, наконец, это сделает ваше приложение более простым и тестируемым (как на стороне клиента, так и на стороне сервера).

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

...