【问题标题】:With subscribers and status updates, who's responsibility is it to notify subscribers?对于订阅者和状态更新,通知订阅者的责任是谁?
【发布时间】:2018-03-12 15:00:03
【问题描述】:

假设我有一个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 方法移到那里并从StatusUpdate 的@987654330 调用它@(类似于Subscriber.notify_all(message)),但这对我来说也有点乱。

执行此操作的正确 OO 方法是什么?通知订阅者是Subscriber 类的责任吗? StatusUpdate 上课?或者也许是一些三等舱?

附:代码是用 Ruby 编写的,但我想这更像是一个通用的面向对象设计问题。

【问题讨论】:

    标签: ruby oop


    【解决方案1】:

    有几件事,这当然是你可以用一种或另一种方式做的事情:

    • 您可能希望将通知(发送短信)移至后台作业,因为这可能会阻塞
    • Subscriber 和 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多