2012-04-19 8 views
1

EventListener/EventSubscriptionプロバイダーの正しい使用方法についてのアイデアを、ちょうどTwistedで聞きたかっただけです。ほとんどのサンプルとツイストソースは、かなりハードな結合を使って特定のメソッドを使ってイベントを処理します。これらのイベントのターゲットメソッドのディスパッチは、特定のプロトコルクラスで「ハードコード」されており、クラスを継承してこれらをオーバーライドして「イベント」を受け取る義務があります。これは、プロトコルを作成するときにすべての潜在的な加入者を知っている間、使用するのがとても素敵で透明です。 しかし、大規模なプロジェクトでは、よりダイナミックなイベントサブスクリプションとサブスクリプションの削除が必要です(おそらく私は間違った考え方をしています)。 「ねじれの方法」に従って、これを達成する正しい方法は何でしょうか。私は現在、イベント購読/ディスパッチメカニズムを作成していますが、このパターンの欠如がより良い方法があることを示唆しているかもしれません。EventListenerメカニズムがねじれています

答えて

1

パッケージ「twisted.words.xish.utility.EventDispatcher」は、使い方を知るためにツイストしたもので、簡単です。しかし、私はTwistedを "Deferred"と呼んでいます。関連するイベント(何かが失敗したもの)、コールバック、フォールバックは登録されたオブザーバー機能のクロージャとして遅延オブジェクトに見えます。 Deferredはネストできるなどの高度な機能を備えています。 私の意見では、TwistedでデフォルトのEventDispatcherを使用することも、簡単な新機能をいくつか作成することもできます。しかし、複雑なメカニズムをTwistedに導入すると、混乱や混乱を招く恐れがあります。

+0

このシナリオでDefferedと表示される欠点は、設計上一度だけ起動され、永久または半永久的なイベントのサブスクリプションに代わるものではないということです。また、私はそのEventDispatcherについて知っています。しかし、私は、EventDispatcherが特定のfuncionalityセットの一部ではなくコアパッケージでなければならないほど些細なことは疑わしいでしょう。これは、EventDispatcherがツイストで必要とされている場合、またはこれに対してより洗練された解決策がある場合、私の疑問を引き起こしたものです。 – jbreicis

+0

サンプルをよりよく説明するための抽象的な使用例は次のようなものです:ネットワークモニタリングアプリケーションを開発しています。モニタされる各要素は実際のインスタンスがねじれています。ここで、各インスタンスは、それが依存するデバイスを認識し、a)観測の開始時に、他のインスタンスによってトリガされたイベントに対してイベントリスナを配置できるようにし、b)リスナを削除するための観察の終了時にできるようにすべきである。これは、複数のタイプの複数のタイプの関係を持ち、実行時にリレーションシップが変化し、イベントが繰り返されるというイベントを賢明に意味します。 – jbreicis

+0

IMHOでは、すべてのイベントをディスパーザに収集し、そのイベントをインスタンス登録することができます。 Pythonの世界にはすでに多くのディスパッチャがあります。 http://pubsub.sourceforge.net。言い換えれば、dipatcherのevent-in-functionは、ねじれたメカニズムのコールバックです。物事をより穏やかにするためには、イベント・イン・ファンクションの最後に「ディスパッチング」作業を行うことができます。 – wuliang

関連する問題