2

私は現在、大規模なバックボーン アプリケーションを Marionette に移行しており、モジュール間のアクティビティを仲介するためのより良い設計についての意見に興味があります。

あるモジュールでのアクションによって他のモジュールでアクティビティが発生する可能性がある複数のモジュールを持つアプリケーションがあります。

これらはすべてアプリケーションに結合されているため、Wreqr インターフェイスを簡単に使用できます。

モジュール 1:

someActivity: ->
   App.vent.trigger("skyFalling")

モジュール 2:

initialize: ->
   App.vent.on("skyFalling", @closeOrSomething)

モジュール 3:

initialize: ->
   App.vent.on("skyFalling", @blinkRapidly)

または、アプリケーション (またはアプリに関連付けられたコントローラー) がリッスンし、モジュールで直接「closeOrSomething」および「blinkRapidly」関数を呼び出す Module1 でイベントをトリガーする方がよいでしょうか (アプリはすべてのロードしているモジュール)。

応用:

skyFallingEventHandler: ->
   Module2.closeOrSomething()
   Module3.blinkRapidly()
4

1 に答える 1

1

私はメディエーターの方法を選択し、モジュールのメソッドapp.vent.trigger()app.vent.on()結び付けません。モジュールとアプリケーションを切り離すようにします。+
を使用するだけです(メディエーター オブジェクトを介したパブ/サブ イベント)。また、メソッド名とその呼び出しを気にする必要はありません。モジュール/クラスが内部で変更され、一部のアプリケーションのイベントに反応する必要がなくなった場合は、そのモジュールのイベント処理 (サブスクリプション) を無効にするだけで、内部のコードを変更する必要はありません。別のエンジニアがモジュールを変更するだけでよく、同様に変更する必要がないようにします。ObserverMediatorApplicationApplication

于 2013-07-18T21:49:47.853 に答える