Насколько необходимо использовать БД и ContentProvider в Android REST приложении?
Здравствуйте!
Посмотрел всем известные паттерны Virgil Dobjanschi для реализации Android REST приложений. Посмотрел еще несколько описаний на хабре и в других местах. Везде настоятельно рекомендуют использовать базу данных и соответственно контент провайдер для доступа к ней. Т.е. если вкратце, то алгоритм такой:
1. запрос на сервер
2. получение результата и обновление БД
3. Оповещение подписчиков о том, что была сделана запись в БД
4. Обновление UI из БД
Не совсем понятны аргументы в сторону использования БД.... К примеру, делаем мы приложение для ресторана, функционал ограничивается авторизацией, просмотром и заказом блюд. Ну соответственно сразу проглядываются основные запросы к серверу: авторизация, получение списка блюда, получение деталей блюд, создание заказов, просмотр старых счетов, еще несколько не значимых запросов. Дальше вопрос по этому примеру. Каков смысл в сохранении блюд в БД, если в любой момент на сервере может измениться информация о блюдах и все равно при каждой загрузке списка блюд и их подробностей надо будет делать обращение к серверу, т.к. инфа могла измениться с последнего раза.
Такие случаи как "во время реквеста на список ресторанов, пользователь свернул приложение и список не загрузился в UI" и подобные лечатся кнопкой "обновить список"....
Вам только так кажется, что кешировать нет необходимости. На деле кеширование решает массу проблем:
скорость работы приложения гораздо выше
работа с сетью расходует батарею
при отсутствии интернета или плохом качестве подключения приложение работает, а не превращается в "браузер"
траффик меньше (как для сервера, так и для пользователя мобильного приложения)
нагрузка на сервер меньше
Примеры:
старые счета нет необходимости перезагружать. Т.е. даже при отсутствии сети человек сможет просмотреть свои счета
на андроиде система может убивать процесс вашего приложение сколько угодно часто из-за нехватки памяти. Т.е. например пользователь запустил ваше приложение, загрузил список блюд, потом вдруг переключился на почту, а затем на браузер, а система тем временем выгрузила ваше приложение из памяти. При наличии кеша человек вернувшись в ваше приложение сразу увидит пару минут назад загруженный список блюд. При отсутствии кеша он вынужден будет снова смотреть на унылое "список загружается".
детали блюда вряд ли будут меняться часто. Т.е. нет никакой необходимости загружать каждый раз ингредиенты. При отсутствии кеша пользователь желая сравнить два блюда будет переключатся между ними каждый раз делая запрос, что будет жутко долго и не удобно.
для обновления закешированых данных можно использовать GCM.
Разрабатывая приложение вы всегда должны помнить что масса пользователей имеет очень слабые устройства с медленным подключением к интернету или вообще с отсутствующем подключением.