2016-08-13 106 views
0

在该项目中,有很多模块。每个模块可能希望接收其他模块/模块发出的数据。Rx在Observable创建之前订阅

试图解决的问题是,当我们订阅一个可观察的A时,这个可观察的可能还没有被创建。为了解决这个问题,我们讨论了两种方法:

  1. 有一个可观察的注册表单例。每当观察者准备好时,将一对成对的注册表,并通知所有模块,注册表已更改。每个模块都将听取这个通知,并决定它是否是一个感兴趣的更改。如果通知观察者已准备就绪,请订阅它。如果observable被删除,更新注册表,删除相应的对,并通知模块,模块退订它。
  2. Rx实施event bus。使用Subject:创建一个单独的Subject,然后每当需要发送事件或数据或项目时,从该主题发出。在您的订阅者中,您只能通过对主题进行过滤来订阅特定事件。

第一种方法看起来非常简单,我不知道它为什么不好。但它对我来说看起来并不可扩展。第二种方法是用Rx替换otto/eventbus的推荐方法。

对这些方法有什么想法?

回答

0

对我来说,第一种方法并不是那么简单和太多处理。订阅者可以订阅一个主题,并在该主题有一个主题时开始接收事件,并且他们不知道是否有新的事件源,因为他们不关心。

我使用版本2的扩展变体,即RxHub library。这是非常灵活的,因为每个主题/标签允许不同的行为。