我们有 3 种产品可供用户订购。
例如:
- iTunes 音乐
- iTunes 图书
- AppleStore 应用
给定:
3 个微服务,根据时间戳为订单历史记录提供 3 个单独的分页响应。
需要:
按时间戳的降序显示来自所有 3 个来源的订单历史记录,并在用户滚动时对它们进行分页。即,根据时间戳和显示对来自 3 个来源的响应进行排序和合并。
有可能是用户购买了:
- 来自所有 3 项服务
- 来自任意 2
- 从任意1个
- 没有
此外,购买的时间表也可能会发生偏差。 例如: 用户仅在 Itunes 音乐中就购买了 10 首歌曲。
我能想到的方法:
<强>1。仅对客户端进行繁重的工作:
将并行调用所有 3 个 API,等待所有 API 响应。 将它们存储在本地。
根据时间戳进行合并和排序。
剪辑最上面的 n 项并显示在设备上。
当用户滚动时,将检查本地是否存在任何数据并相应地调用 API。
<强>2。仅在服务器端进行繁重的工作:
有一个可以与所有服务对话的代理。
收到来自客户端的请求时 fetchData (noOfItems, fetchedUntilTimestamp)
,
代理应通过调用 getData(noOfItems, fetchFromTimeStamp)
从不同来源获取数据。
每个数据源都应从时间戳 fetchFromTimeStamp 开始获取 noOfItems 并返回数据列表。
代理人应:
- SORTED_LIST = 基于多个来源的数据排序列表 时间戳
- RESULT_LIST = SORTED_LIST 的前 noOfItems
- fetchedUntilTimestamp = RESULT_LIST 最后一项的时间戳
代理应返回给客户端:RESULT_LIST + fetchedUntilTimeStamp
从下一个请求开始,客户端应调用 fetchData (noOfItems, fetchedUntilTimestamp)
并使用从上次调用从服务器接收到的 fetchedUntilTimeStamp
两者中哪一个更受欢迎?有没有更好的方法来解决这个问题?
最佳答案
这取决于您的环境。
如果服务器资源昂贵,你应该选择解决方案1。另外注意服务器不需要被调用三次。连接也是昂贵的资源,三个连接有更多的异常分支。服务器应该提供一个接口(interface)来返回所有三种项目。
否则你应该选择解决方案2。特别是有多个客户端,需要多个开发人员,在客户端实现意味着需要多个工作,并且可能有多个错误。实现细节可能不同。这一切都需要更多的考验。
最后,在实践中,解决方案可能由更大的声音决定。
关于android - 在来自服务器的多个数据源的客户端上显示分页数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50253862/