3

保持数据一致性

 3 years ago
source link: https://zhuanlan.zhihu.com/p/24753979
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

保持数据一致性

斯拉夫传承者,嘴炮学家
在客户端开发中,常常出现在当前界面删除数据后,相关的界面需要同步的场景。虽然可以让用户手动刷新一次,但这样的体验毕竟不好,最好在删除数据后所有界面都能马上做出响应。500px 团队前不久发布了一篇博客,就围绕 Android 开发中的数据一致性展开了讨论。

为了保持数据一致性,一般有三种实现方式:

  1. 定义接口,实现了接口的 View 可以相互之间通信;
  2. 使用全局的事件总线;
  3. 使用「发布/订阅」系统。

定义并实现接口,虽然易于理解,并且将处理数据职责的相关 View 束缚在一定范围内(相对于全局而言),但却容易让代码臃肿、紧耦合。一个 View 只需要关心它自己的数据处理逻辑,对于其他 View 的状态其实是不关心也不应该关心的,接口这种方式让 View 多处理了本不该处理的事;并且在后续开发中,如果有新的 View 依赖加入,就要扩展之前的处理逻辑,很是麻烦。不建议采用。

全局的事件总线如 EventBus/RxBus/Otto 等,虽然让代码不太耦合了,但随着需要处理的事件越来越多,事件也会变得越来越难管理,参考 Telegram 的消息中心实现。

最后来说说「订阅/发布」系统。也许大家会觉得奇怪,为什么 EventBus 这类实现不能归类在这个系统里呢?宽泛来说确实应该属于,但是在这里我们要说的是基于数据改变的模式,而不是依靠自定义事件。某种程度上说类似于 MVVM ,相关 Model 改变了,对应的 View 也产生变化。目前看来这是保持数据唯一性最好的方式了。500px 团队内部开发了名为 Jackie 的中心化数据发布/订阅系统,在未来也有相关的开源计划。不过话说回来,如果是让你自己来实现这样一套系统,你会怎么做呢?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK