6

イベント/リスナー モデルに適したアプリケーションがあります。いくつかの異なる種類のデータがパブリッシュされ (イベント)、その後、さまざまなことがそのデータ (リスナー) に作用する必要がある場合とそうでない場合があります。リスナーが発生する必要がある特定の順序はなく、各リスナーは、イベントに対して動作する必要があるかどうかを判断します。

このタスクを実行するための Rails アプリ用のツールは何ですか? 私はこれを自分で行う必要がないことを望んでいます(ただし、できます。それほど大したことではありません。)

編集:これにはオブザーバーパターンの方が適しているかもしれません

4

4 に答える 4

6

EventMachineをチェックしてください。これは、Rubyで非常に人気のあるイベント処理ライブラリです。見た目はかなり良く、他の多くのライブラリがそれを利用しているようです(Cramp)。

ここに良い紹介があります:http://rubylearning.com/blog/2010/10/01/an-introduction-to-eventmachine-and-how-to-avoid-callback-spaghetti/

于 2011-01-14T22:14:57.260 に答える
5

Observerおそらく ActiveRecord のクラスにフックしたいと思うでしょう。

http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Observer.html

これにより、モデルはいくつかのライフサイクル イベントのカスタム ロジックを実行できます。

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

私があなたの意図を正しく理解している場合は、リスナーのアクションを表すメソッドをそれらのコールバックからイベントに呼び出すだけです。

于 2011-01-14T21:50:29.737 に答える
3

ActiveSupport::Notifications.instrument を使用することをお勧めします。

これは、イベントの送信とイベントの反応を分離するための汎用ブリッジです。これは、単一の Web リクエスト中にすべてのリスナーを実行することを目的としています。これは、多数の同時発生を目的とした EventMachine とは異なります。

于 2013-11-08T12:21:04.490 に答える
1

このユースケースに正確に対応するルビー宝石を作成しました:event_dispatcher

この gem はシンプルなオブザーバーの実装を提供し、シンプルかつ効果的な方法でアプリケーションのイベントをサブスクライブしてリッスンできるようにします。

于 2013-12-28T03:20:08.893 に答える