4

在 Rails 中,我见过的最接近Django 信号的是Observers。它们的问题在于它们仅限于触发与模型生命周期相关的硬编码事件的回调。

Django 信号可以在任何地方创建、在任何地方触发和在任何地方处理。模型生命周期回调只是碰巧内置并由 ORM 触发的常规信号。

有谁知道 Rails 的类似通用解决方案?它可以是一些通用的 Ruby 库,不依赖于 Rails,这样会更好。


编辑:观察者是最接近的东西,但这不是我想要的。这是一个一对多的解决方案。任何人都可以收听,但只有发起对象可以发帖。我想要你声明一个信号的东西,任何人都可以触发它以及处理它。此外,我不喜欢 Ruby Observer 规定处理程序具有 #update 方法的事实。我希望能够使用适当的签名传递任何方法引用。

我可以使用 Ruby Observer 来实现我自己的此类代理,但我正在尝试了解是否有人已经这样做了。

4

5 回答 5

3

我认为与 Rails 的 Observer 更接近的是标准的 Ruby Observable 模块。它允许您将观察者列表添加到对象,然后对象可以在其更改时向观察者发送通知。

于 2009-08-08T08:55:03.753 回答
1

那么'wisper'宝石呢?https://github.com/krisleech/wisper

Wisper 是一个 Ruby 库,用于使用 Pub/Sub 解耦和管理 Ruby 对象的依赖关系。

它通常用作 ActiveRecord 回调和观察者的替代品,以减少数据层和域层之间的耦合。

于 2014-08-21T01:07:14.737 回答
0

也许acts_as_state 机器会有所帮助。这个功能的大部分最近都被嵌入到 Rails edge 中。

于 2009-08-08T10:45:03.440 回答
0

我刚刚用它实现了一个gem。https://github.com/pkoch/django_signal/

于 2012-03-19T05:39:14.553 回答
0

Ruby gem 'watchable' 是最合适的选择 https://github.com/jbarnette/watchable

它具有 Django(以及其他框架,如 Qt 和许多其他框架)非常熟悉的语法。

于 2013-02-26T15:30:43.550 回答