0

我是一个相当新的 Flutter 程序员,所以请原谅以下问题中的任何缺陷......</p>

我正在与结构/架构困境作斗争。这是背景: 应用原理:

  • 我的应用程序允许其用户检查他们所在地区可用的少量工作,以及他们是否有时间并在适当的位置执行工作以获得报酬,
  • 该应用程序使用标准 REST API(不是 Firebase),因此不能依赖服务器发送状态更改通知来触发重新获取数据,
  • 关键要素是 (1) 给定地址的最新工作列表 - 其他用户可能已经在某个地址接受了工作(定时刷新列表,例如每 5 分钟一次),以及 (2) 应用程序需要跟踪用户的位置,如果用户在刷新时间内移动超过 2 公里,则相应地向服务器请求工作,

挑战:

  • 我猜在基本层面上,应用程序应该有以下提供者:(1) auth - 提供 authToken,(2) geolocation - 定期检查用户的位置,(3) jobList - 特定位置(获取高级职位描述和地址(, (4) jobDetails – 获取执行特定作业的准确指令,
  • 如您所见:(2) 地理位置和 (3) jobList – 需要以编程方式刷新(间隔或在地理位置发生某些变化时),而 (1) auth, (4) jobDetails 由用户触发。

最大的问题 ;) 是……对于上述类型的应用程序的正确架构是什么?进一步来说:

  • 我应该使用服务连接到服务器 API,而这些服务又会被提供商使用吗?
  • 如何确保在计时器上以编程方式重新获取jobList并从地理位置重新定位事件?
  • 如何持续监听位置变化以检测重定位但又不会让应用程序不堪重负?
  • 我应该将(快速过时的)jobLIst 数据存储在其对象类中,还是应该使用设置提供程序或本地数据库,或者可能有一种简单的方法来存储最新的 JSON 响应而不必构建设置提供程序或数据库映射?
  • 在我对 Auth api 的所有调用中,我需要提供 deviceId - 如何使其在整个应用程序中可用 - 这是非常静态的,但在身份验证中需要,所以检查它是否应该是身份验证提供程序的一部分?

如果您能对上述内容发表评论或提出相关示例的来源,我将不胜感激。

谢谢和欢呼!

4

1 回答 1

0

以下是我的想法:

  • 如何持续监听位置变化以检测重定位但又不会让应用程序不堪重负?

您可以依靠第三方为您执行此操作。如:地理定位器。有了这个,您可以指定在包裹通知您用户位置更改之前用户必须移动的距离量。

  • 我应该将(很快过时的)jobLIst 数据存储在其对象类中还是...

由于工作列表应用程序很可能经常在不同的地方使用这些数据,我更喜欢使用 db. 如果您计划在移动端进行某种分析或收集任何见解,从长远来看,这也会有所帮助。

  • 在我对 Auth api 的所有调用中,我需要提供 deviceId - 如何使其在整个应用程序中可用......

当您的应用程序初始化时,您可以获取 deviceID 并将其存储在shared_preferences中。然后在 auth api 中,您可以在进行 API 调用之前检索它。

  • 我应该使用服务连接到服务器 API,而这些服务又会被提供商使用吗?

至于地理位置,geolocator可以更新您的位置变化,您可以基于此进行 API 调用。

但是,如果您计划使用基于计时器的方法来刷新您的职位列表,那么您必须意识到您的用户可能会面临由您的数据不一致引起的问题。如果您有计划解决它,那么这里的实现可能会有所帮助。但我强烈认为支持推送通知的服务器或 Web 套接字方法在这里是理想的。

于 2020-10-24T14:15:09.563 回答