假设我有一个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中,但我想这更像是一个通用的面向对象设计问题。
答案 0 :(得分:1)
有几件事,这当然是你可以做某种方式的事情:
像
这样的东西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