android - 在来自服务器的多个数据源的客户端上显示分页数据

标签 android ios architecture client-server

我们有 3 种产品可供用户订购。

例如:

  • iTunes 音乐
  • iTunes 图书
  • AppleStore 应用

给定:

3 个微服务,根据时间戳为订单历史记录提供 3 个单独的分页响应。

需要:

按时间戳的降序显示来自所有 3 个来源的订单历史记录,并在用户滚动时对它们进行分页。即,根据时间戳和显示对来自 3 个来源的响应进行排序和合并。

有可能是用户购买了:

  1. 来自所有 3 项服务
  2. 来自任意 2
  3. 从任意1个
  4. 没有

此外,购买的时间表也可能会发生偏差。 例如: 用户仅在 Itunes 音乐中就购买了 10 首歌曲。

我能想到的方法:

<强>1。仅对客户端进行繁重的工作:

将并行调用所有 3 个 API,等待所有 API 响应。 将它们存储在本地。

根据时间戳进行合并和排序。

剪辑最上面的 n 项并显示在设备上。

当用户滚动时,将检查本地是否存在任何数据并相应地调用 API。

<强>2。仅在服务器端进行繁重的工作:

有一个可以与所有服务对话的代理。

收到来自客户端的请求时 fetchData (noOfItems, fetchedUntilTimestamp),

代理应通过调用 getData(noOfItems, fetchFromTimeStamp) 从不同来源获取数据。

每个数据源都应从时间戳 fetchFromTimeStamp 开始获取 noOfItems 并返回数据列表。

代理人应:

  1. SORTED_LIST = 基于多个来源的数据排序列表 时间戳
  2. RESULT_LIST = SORTED_LIST 的前 noOfItems
  3. fetchedUntilTimestamp = RESULT_LIST 最后一项的时间戳

代理应返回给客户端:RESULT_LIST + fetchedUntilTimeStamp

从下一个请求开始,客户端应调用 fetchData (noOfItems, fetchedUntilTimestamp) 并使用从上次调用从服务器接收到的 fetchedUntilTimeStamp

两者中哪一个更受欢迎?有没有更好的方法来解决这个问题?

最佳答案

这取决于您的环境。

如果服务器资源昂贵,你应该选择解决方案1。另外注意服务器不需要被调用三次。连接也是昂贵的资源,三个连接有更多的异常分支。服务器应该提供一个接口(interface)来返回所有三种项目。

否则你应该选择解决方案2。特别是有多个客户端,需要多个开发人员,在客户端实现意味着需要多个工作,并且可能有多个错误。实现细节可能不同。这一切都需要更多的考验。

最后,在实践中,解决方案可能由更大的声音决定。

关于android - 在来自服务器的多个数据源的客户端上显示分页数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50253862/

相关文章:

Java - 如何初始化堆栈使用另一个现有的堆栈?

java - 如何在特定时间内自动启用/禁用推送通知

ios - 如何获取可用输出音频源列表(扬声器、耳机、蓝牙)

asp.net-mvc - 使用用户身份从移动客户端访问 WCF 服务

java - 静态变量作为全局变量,静态对象何时被垃圾收集?

android - 如何以编程方式安装特定语言的 tts 语言数据?

ios - glTexImage2D 完成上传后如何得到通知?

ios - FBRequestDelegate 仅适用于 AppDelegate?

rest - 微服务:REST 与消息传递

architecture - Enterprise Architect 中的导入/导出