Можно ли применить одну подписку к нескольким слушателям с Wisper?

У меня есть служба, которая транслирует событие, когда удовлетворяются некоторые критерии. У меня также есть несколько специальных услуг для клиентов. Я хочу, чтобы служба поддержки клиентов была уведомлена о событии. Однако я бы предпочел не добавлять подписку к службе вещания или инициализатору каждый раз, когда добавляется клиент и связанная с ним служба. Я хочу, чтобы служба вещания не знала о конкретных слушателях, чтобы нам не приходилось добавлять код в эту службу каждый раз, когда добавляется клиент. Могу ли я иметь одну подписку (либо в службе вещания, либо в инициализаторе), которая может уведомлять все службы клиентов? Это приложение Ruby/Rails, и службы поддержки клиентов не создаются - они содержат методы класса.

1 ответ

Я решил это, перебрав все классы, которые являются членами моего модуля Customer, и подписавшись на каждый из них. Это было добавлено в application.rb.

config.after_initialize do
  Customer.constants.select { |c| Customer.const_get(c).is_a? Class }
          .map { |klass| 'Customer::' + klass.to_s }
          .each { |klass| ScanEventService.subscribe(klass.constantize) }
end

Каждый раз, когда я добавляю новую службу поддержки клиентов, я делаю ее участником этого модуля.

Другие вопросы по тегам