Flutter — вопрос об архитектуре, провайдерах и получении данных с сервера

Я довольно новый программист 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 - как сделать его доступным через приложение - это довольно статично, но необходимо для аутентификации, поэтому должна ли проверка быть частью поставщика аутентификации?

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

Спасибо и ура!


person Łukasz Garczynski    schedule 24.10.2020    source источник


Ответы (1)


Вот мои мысли:

  • как постоянно прослушивать изменения местоположения, чтобы обнаружить перемещение, но не перегружать приложение обработкой?

Вы можете положиться на третью сторону, которая сделает это за вас. Например: геолокатор. При этом вы можете указать расстояние, на которое должен пройти пользователь, прежде чем пакет уведомит вас об изменении местоположения пользователя.

  • должен ли я хранить (быстро устаревшие) данные jobLIst только в своем объектном классе или...

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

  • во всех моих вызовах Auth API мне нужно указать deviceId - как сделать его доступным через приложение...

Когда ваше приложение инициализировано, вы можете получить идентификатор устройства и сохранить его в shared_preferences. Затем в auth API вы можете просто получить его перед вызовом API.

  • должен ли я использовать службы для подключения к серверному API, и они, в свою очередь, будут использоваться провайдерами?

Что касается геолокации, геолокатор может информировать вас об изменении местоположения, и вы можете сделать вызов API на основе на что.

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

person Joy Terence    schedule 24.10.2020
comment
Привет - спасибо за мысли! Мне нужно сначала их переварить, прежде чем я смогу отреагировать ;) Ура! - person Łukasz Garczynski; 24.10.2020