2016-08-13 2 views
0

В проекте есть много модулей. Каждый модуль может захотеть получать данные, испускаемые из других модулей/модулей.Rx Подписка до создания наблюдаемого

Проблема, которую мы пытаемся решить, заключается в том, что когда мы подписываемся на наблюдаемый А, этот наблюдаемый, возможно, еще не был создан. Для решения этой проблемы обсуждаются два подхода:

  1. Имеют наблюдаемый реестр Singleton. Каждый раз, когда наблюдаемый готов, поместите пару в реестр и сообщите обо всех модулях, которые изменил реестр. Каждый модуль будет прослушивать это уведомление и решать, интересует ли оно изменение. Если будет сообщено, что наблюдаемый готов, подпишитесь на него. Если наблюдаемое удалено, обновите реестр, удалите соответствующую пару и уведомите модули, модуль отменит его подписку.
  2. Внедрение Rx event bus. Используйте Subject: создайте одноэлементный объект, затем всякий раз, когда событие или данные или элемент необходимо испускать, испускайте его из этого объекта. В вашем подписчике вы подписываетесь только на конкретное событие, используя фильтр по этому вопросу.

Первый подход выглядит очень прост, и я не могу сказать, почему это не хорошо. Но это просто не выглядит масштабируемым для меня. Второй подход - рекомендуемый способ замены otto/eventbus на Rx.

Любые мысли об этих подходах?

ответ

0

Для меня первый подход не так прост и слишком велик. Абоненты могут подписаться на тему и начать получать события всякий раз, когда есть один для этой темы, и они не будут знать, есть ли новый источник событий, поскольку им все равно.

Я использую расширенный вариант версии 2, который является RxHub library. Он довольно гибкий, так как позволяет различное поведение для каждой темы/тега.

Смежные вопросы