RailsのためのDjangoの信号の等価?
-
12-09-2019 - |
質問
Railsでは、私はジャンゴに見てきた最も近いにされる信号オブザーバーはしています。それらの問題は、それらがモデルのライフサイクルに関連するハードコーディングされたイベントにコールバックをトリガに制限しているということです。
Djangoの信号は、どこにでも作成することができ、どこでもトリガどこでも取り扱います。モデルのライフサイクルコールバックは、ORMによってトリガーされるビルトインを来ることが起こると、普通の信号であります。
誰もがRailsのための同様の一般的な解決策を知っていますか?それも良いだろうレールに縛られない、いくつかの一般的なRubyのライブラリ、可能性があります。
<時間>編集:オブザーバーが最も近いものであるが、それは私が探しているものではないのです。これは、1対多のソリューションです。誰でも聞くことができますが、唯一の元のオブジェクトを投稿することができます。私は、あなたが信号を宣言する何かが欲しい、と誰もがそれをトリガーするだけでなく、それを扱うことができます。また、私は、Rubyオブザーバーは、ハンドラが#updateメソッドを持っていることを指示するという事実が好きではありません。私は、適切なシグネチャを持つ、任意の方法の参照を渡すことができるようにしたいと思います。
私は自分自身のようにブローカーを実装するためのRubyオブザーバーを使用することができますが、私は、誰かがすでにそれをやったかどうかを学習しようとしています。
解決
私はRailsのオブザーバーよりも近くに相当標準のRubyだと思います観測可能なモジュールに。それはあなたがオブジェクトにオブザーバーのリストを追加し、それが変化したときに、オブジェクトが、その後オブザーバに通知を送信することができます。
他のヒント
'wisper' 宝石はどう? https://github.com/krisleech/wisperする
Wisperは、依存関係をデカップリングし、管理するためのRubyライブラリです パブ/サブを使用して、Rubyのオブジェクトのます。
これは、一般的にActiveRecordのコールバックの代替として使用され、 データとドメイン層との間の結合を低減するオブザーバー。
おそらくacts_as_stateマシンが役立ちます。この機能のほとんどは、最近のRailsのエッジに焼かれています。
私はちょうどそれと宝石を実装しました。 https://github.com/pkoch/django_signal/する
Rubyの宝石「なんとか見の最も適切な選択であります https://github.com/jbarnette/watchableする
これは、Djangoの(および他のフレームワーク、Qtと他の多くのよう)に非常に精通している構文を持っています。