Я довольно новый программист Flutter, поэтому, пожалуйста, извините за любые недостатки в вопросах ниже…
Я борюсь с дилеммой структуры/архитектуры. Вот предыстория: Обоснование приложения:
- мое приложение позволяет своим пользователям проверять небольшие вакансии, доступные в их районе, и если они находят время и находятся в нужном месте, чтобы выполнить работу за вознаграждение,
- приложение использует стандартный REST API (не Firebase), поэтому нельзя полагаться на отправку сервером уведомлений об изменении статуса для запуска повторной выборки данных,
- критическими элементами являются (1) актуальный список заданий для заданного адреса — другой пользователь, возможно, уже взялся за задание по адресу (обновление списка по времени, например, каждые 5 минут), и (2) приложению необходимо отслеживать местоположение пользователя и, соответственно, запрашивать задания у сервера, если пользователь перемещается более чем на 2 км менее чем за время обновления,
Соревнование:
- Я предполагаю, что на базовом уровне приложение должно иметь следующих провайдеров: (1) auth — предоставление authToken, (2) геолокация — регулярная проверка местоположения пользователя, (3) jobList — для определенного местоположения (выбирает высокоуровневые описания вакансий и адреса (, (4) jobDetails — получает точные инструкции по выполнению конкретной работы,
- как вы можете видеть: (2) геолокация и (3) jobList — необходимо обновлять программно (с интервалом или при некотором изменении геолокации), а (1) auth, (4) jobDetails запускаются пользователем.
Большой вопрос ;) заключается в следующем: какова правильная архитектура для вышеуказанного типа приложений? Более конкретно:
- должен ли я использовать службы для подключения к серверному API, и они, в свою очередь, будут использоваться провайдерами?
- как обеспечить программное обновление jobList по таймеру и событию перемещения из геолокации?
- как постоянно прослушивать изменения местоположения, чтобы обнаружить перемещение, но не перегружать приложение обработкой?
- должен ли я хранить (быстро устаревающие) данные jobLIst только в его объектном классе, или мне следует использовать поставщика настроек или локальную базу данных, или, может быть, есть простой способ сохранить последний ответ JSON, чтобы не создавать поставщика настроек или отображение базы данных?
- во всех моих вызовах Auth API мне нужно указать deviceId - как сделать его доступным через приложение - это довольно статично, но необходимо для аутентификации, поэтому должна ли проверка быть частью поставщика аутентификации?
Если бы вы могли прокомментировать вышеизложенное или предложить источник соответствующих примеров, я был бы очень признателен.
Спасибо и ура!