0

我有一项服务可以在满足某些条件时广播事件。我也有几个客户特定的服务。我希望将事件通知客户服务。但是,我宁愿不要在每次添加客户及其相关服务时添加对广播服务或初始化程序的订阅。我希望广播服务不知道特定的听众,这样我们就不必在每次添加客户时都向该服务添加代码。有什么办法,我可以有一个可以通知所有客户服务的订阅(在广播服务或初始化程序中)?这是一个 Ruby/Rails 应用程序,客户服务没有实例化——它们包含类方法。

4

1 回答 1

0

我通过遍历作为我的 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

每次我添加一个新的客户服务时,我都会让它成为这个模块的成员。

于 2020-08-07T17:54:58.397 回答