通过订阅者和状态更新,谁有责任通知订阅者?

时间:2018-03-12 15:00:04

标签: ruby oop

假设我有一个Subscriber课程和一个StatusUpdate课程。我希望所有订阅者在有新的StatusUpdate时收到通知。

以下是现在的样子:

class Subscriber
    attr_accessor :number
end

StatusUpdate类:

class StatusUpdate
    attr_accessor :status

    def initializer(body)
        @body = body
        notify_subscribers
    end

    private

    def notify_subscribers
        Subscriber.all.each do |subscriber|
            # some code to send an SMS to the subscriber
        end
    end
end   

但是看看这段代码,我发现通知订阅者的责任应该在于Subscriber类,我应该在那里移动notify_subscribers方法并从{{1 }} StatusUpdate(类似于initialize),但这对我来说也很麻烦。

这样做的OO方法是什么?通知订阅者Subscriber.notify_all(message)类的责任? Subscriber课程?或者也许是第三类?

P.S。代码在Ruby中,但我想这更像是一个通用的面向对象设计问题。

1 个答案:

答案 0 :(得分:1)

有几件事,这当然是你可以做某种方式的事情:

  • 您可能希望将通知(发送短信)移至后台作业,因为这可能会阻止
  • 订阅者和StatusUpdate都不应该进行通知,他们只保留与该状态更新相关的信息
  • 我会创建一个处理通知的服务

这样的东西
class SendNotifications
  def initialize(status_update)
    @status_update = status_update
  end

  def call
    Subscriber.find_each do |subscriber|
      Notifier.perform_async(subscriber.mobile, status_update.body)
    end
  end

  private
  attr_reader :status_update
end