我有一个适用于事件/侦听器模型的应用程序。几种不同的数据被发布(事件),然后许多不同的事情可能需要或可能不需要对数据(听众)进行操作。听众没有特定的顺序需要发生,每个听众都会决定是否需要采取行动。事件/观察者驱动的Ruby on Rails
Rails应用程序有哪些工具可以完成此任务?我希望没有做到这一点我自己
编辑(虽然,我不能这不是什么大不了的事。):Observer模式可能是一个更好的选择。这
我有一个适用于事件/侦听器模型的应用程序。几种不同的数据被发布(事件),然后许多不同的事情可能需要或可能不需要对数据(听众)进行操作。听众没有特定的顺序需要发生,每个听众都会决定是否需要采取行动。事件/观察者驱动的Ruby on Rails
Rails应用程序有哪些工具可以完成此任务?我希望没有做到这一点我自己
编辑(虽然,我不能这不是什么大不了的事。):Observer模式可能是一个更好的选择。这
结账EventMachine。这是一个非常受欢迎的Ruby事件处理库。它看起来相当不错,很多其他库似乎都利用它(Cramp)。
你可能会想钩入ActiveRecord的Observer
类。
http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Observer.html
有了它,你的模型可以用于多种生命周期事件执行自定义逻辑:
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
如果我正确理解你的意图,所有你需要做的是调用的方法代表您的侦听者对这些回调事件的操作。
您可能需要使用的ActiveSupport :: Notifications.instrument。
它是解耦事件发送到事件响应的通用桥梁。它适合于在单个Web请求期间执行所有监听器,与EventMachine不同,它适应于大量并发事件的发生。
我创建了一个红宝石的宝石正是应对这种使用情况:event_dispatcher
这种宝石提供了一个简单的观察器实现,允许您订阅和监听用一个简单而有效的方式在你的应用程序事件。
这些监听器是单独的进程吗?还是他们在数据发布期间可以调用的简单代码块? – Nemo157 2011-01-14 21:52:36
80%的时间可能都是简单的代码块。单独的过程将是罕见的情况,但仍可能发生。 – Drew 2011-01-14 21:55:39