2009-08-08 10 views
3

Railsでは、Django Signalsに一番近いのはObserversです。それらの問題は、モデルのライフサイクルに関連するハードコードされたイベントのコールバックをトリガすることに限定されていることです。Django Signals for Railsに相当しますか?

Djangoシグナルはどこにでも作成でき、どこでも起動してどこでも処理できます。モデルのライフサイクルコールバックは、組み込みで発生し、ORMによってトリガされる通常のシグナルです。

Railsの同様の一般的な解決法を知っている人はいますか? Railsには結びつかないいくつかの汎用的なRubyライブラリである可能性があります。


編集:Observerは最も近いものですが、私が探しているものではありません。これは1対多のソリューションです。誰でも聞くことができますが、元のオブジェクトだけが投稿できます。私はあなたがシグナルを宣言しているところで何かをしたいと思いますし、誰でもそれを処理して処理することができます。また、私はRuby Observerがハンドラに#updateメソッドがあることを指示しているのは嫌です。私は適切な署名を持つメソッド参照を渡すことができるようにしたいと思います。

私はRuby Observerを使って自分のブローカーを実装することができましたが、誰かが既にそれをしたかどうかを知ろうとしています。

+0

Observerパターンは、RailsではなくRubyの標準ライブラリの一部です。 Rails Observersは、私が知る限り、特別な大会オーバコンフィグレーションケースです。 –

答えて

3

RailsのObserverよりも同等のものがstandard Ruby Observable moduleだと思います。オブザーバーのリストをオブジェクトに追加すると、オブジェクトはオブザーバーが変更されたときにオブザーバーに通知を送信できます。

0

おそらくacts_as_stateマシンが役立ちます。この機能のほとんどは最近、Railsのエッジに焼き付けられています。

0

Rubyの宝石「はなんとか見」これはDjangoの(および他のフレームワーク、Qtと他の多くのよう)に非常に精通している構文を持つ、最も適切な選択 https://github.com/jbarnette/watchable

です。

1

「ウィスパー」宝石はどうですか? https://github.com/krisleech/wisper

Wisperはデカップリングとパブリッシュ/サブスクライブを使用してオブジェクトの依存関係、あなたのRubyの を管理するためのRubyライブラリです。

これは、ActiveRecordコールバックとデータとドメイン層間の結合を減らすための オブザーバの代替として一般に使用されます。

関連する問題