在项目中,有很多模块。每个模块都可能想要接收来自其他模块/模块发出的数据。
要解决的问题是,当我们订阅一个可观察对象A时,这个可观察对象可能还没有被创建。为了解决这个问题,讨论了两种方法:
- 有一个Observable Registry单例。每次当一个可观察对象准备好了,就在Registry中放入一对,并通知所有的模块Registry发生了变化。每个模块将听取此通知,并决定它是否感兴趣的更改。如果它被通知observable已经准备好了,就订阅它。如果这个可观察对象被删除了,更新注册表,删除对应的对,通知模块,模块取消订阅。 Rx实现了事件总线。使用Subject:创建一个单例Subject,然后每当需要发出事件、数据或项时,就从这个Subject发出。在订阅者中,通过对主题使用过滤器,您只能订阅特定的事件。
第一种方法看起来很简单,我不知道为什么它不好。但在我看来,这是不可扩展的。第二种方法是用Rx代替otto/eventbus的推荐方法。
对这些方法有什么想法吗?
对我来说,第一种方法不是那么简单,而且处理起来太多了。订阅者可以订阅一个主题,并在该主题有事件时开始接收事件,他们不知道是否有新的事件源,因为他们不在乎。
我使用版本2的扩展版本,即RxHub库。它非常灵活,允许每个主题/标签的不同行为