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

时间:2018-05-09 12:49:55

标签: android ios architecture client-server

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

例如:

  • Itunes音乐
  • Itunes Books
  • 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的最后一项的时间戳
    4. 代理应返回客户端:RESULT_LIST + fetchedUntilTimeStamp

      从下一次请求开始,客户应使用前一次呼叫中从服务器收到的fetchData (noOfItems, fetchedUntilTimestamp)来呼叫fetchedUntilTimeStamp

      两者中哪一个更受青睐?有没有更好的解决方法?

2 个答案:

答案 0 :(得分:0)

这取决于您的环境。

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

否则你应该选择解决方案2.特别是有多个客户端,需要多个开发人员,在客户端实现需要多个工作,并且可能有多个错误。实施细节可能有所不同。所有这些都需要更多的测试。

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

答案 1 :(得分:0)

解决方案1的唯一优势是您不必创建新的门面服务来调用3个微服务。缺点是您的客户端代码变得更加复杂,如果添加第4个产品,您将不得不发布新客户端。

解决方案2使客户端变得更加简单。您可以轻松添加第4个产品(或删除产品)。您可以在服务器上比客户端更好地优化性能。

我总是试图在客户端和服务器上保留特定的业务知识(我们销售多少产品?)。