1

我正在开发一个社交网络类型的应用程序,用户可以在其中看到“帖子”列表并可以与它们进行交互,特别是他们可以“喜欢”它们。

帖子列表在 10,000 多个,因此我们使用 Android 的分页库(DB + Network)对其进行分页,但这适用于任何需要修改缓存对象的情况。

加载和分页列表效果很好,反应灵敏,内置动画很好。问题是当用户喜欢一个帖子时。为了喜欢一个帖子,列表项上有一个按钮。当用户喜欢(或“不喜欢”)帖子时,按钮的图标会发生变化,“喜欢计数”会相应地增加或减少,我们必须调用适当的 Web 服务。这都是基本的社交网络东西,看起来很简单,但我正在努力正确有效地更新数据。到目前为止,我提出了三种可能性,但它们都很糟糕:

  1. 发出请求并接收更新的对象,然后将其重新插入数据库。这很简单,并且可以确保数据正确,但这意味着用户必须等待请求返回,然后再刷新 UI,这通常会导致用户在图像上单击多次(执行多个请求)。所以几乎没用。
  2. 修改 UI(列表项视图更新其视觉状态)但不修改后备数据,然后发出请求并将结果插入数据库。这是一个巨大的 PITA,因为它会导致视觉状态不同步,因此如果用户在请求完成之前滚动并返回,他们将看到原始状态。我还必须将错误传达回视图,以便它可以恢复其状态。
  3. 修改内存中的对象(更改点赞数和类似用户帖子的关系),制作原始副本,将其重新插入数据库,发出请求,然后将更新后的对象从 Web 服务或原始对象插入错误的情况。这提供了即时的视觉反馈并保持了数据的完整性,但只是稍微少了一点 PITA。

所以目前我选择 3 因为它似乎是最好的,但我想知道是否有更好的方法来处理这个问题?似乎我正在为这样一个基本功能而努力,这个问题肯定已经解决了一百万次了吗?我不习惯在 CRUD 系统上使用缓存(我已经为只读数据实现了基本缓存),但修改缓存的障碍比我预期的要大。

4

0 回答 0