【译】使用观察类 (Observer)

Sunday, July 25, 2010

原文:http://rails-bestpractices.com/posts/19-use-observer

观察着作为一个模型和一些子系统的连接点用在其他的一些类中, 比如邮件提醒,这是在模型回调中松耦合的方式

丑陋的...

class Project < ActiveRecord::Base
  after_create :send_create_notifications

private
    def send_create_notifications
      self.members.do |member|
        ProjectMailer.deliver_notification(self, member)
      end
    end
end

在这个例子中我们用了一个创建完一个project后的模型回掉来发送Email,使用Observer或许更好,
因为邮件提醒是一个子系统他的功能在其他的类中也会用到

重构...

class Project < ActiveRecord::Base
  # nothing here
end

class NotificationObserver < ActiveRecord::Observer
  observe Project

def after_create(project)
    project.members.each do |member|
      ProjectMailer.deliver_notice(project, member)
    end
  end
end

使用Observer,Project模型不必关心邮件提醒的事情,NotificationObserver这个观察类会在创建了一个项目后响应发送邮件,或许你在创建和更新一个问题的时候也要发送一个邮件通知,这样很容易去维护邮件提醒的工作在一个观察类中,
然后分发到不同的模型中去

This entry was tagged Rails and Best-Practices

comments powered by Disqus

© 2009-2013 lxneng.com. All rights reserved. Powered by Pyramid

go to Top