0

私は backbone/require を使用する方法を改良している最中です。モジュールを結合することがどれほど悪い慣行であるかについての難しい方法を見つけました (当時は分離を理解していませんでした)。

私はMinPubSubで遊び始め、大部分は理解しましたが、私が読んだところによると、他のモジュールは他のモジュールをサブスクライブすべきではありません (結合されますか?)。代わりに、それらは、相互作用する方法を伝えるすべてのモジュール間の仲介者であるべきです。

このメディエーターはすべてのモジュールにサブスクライブされてお​​り、すべてのモジュールはメディエーターにサブスクライブされていると思いますか?

これを実装する方法がわかりませんが、これをバックボーンで実装する方法に関する確かなコード例をまだ見つけていません。

これは一般的な質問で申し訳ありませんが、私の頭を概念に包み込み、広く使用されている適切な例を見つけようとしています。

4

2 に答える 2

2

おかしなことに、私が大いに楽しんだライブラリの 1 つは、Mediatorと呼ばれるものです。

サイトには素晴らしい例がありますが、大まかに:

$.getJSON('url/to/json', function(json) {
    mediator.publish('myData:loaded', {response: json});
});

// Somewhere else
mediator.subscribe('myData:loaded', function(json) {
    // Do something
});
于 2013-04-12T22:10:40.433 に答える
2

へん。pubsub アプローチ、メディエーター パターンの実装です。メディエーターは pubsub ハンドラーです。

これを明確にしましょう。pubsub モデルでは、チャンネルを登録して公開します。リッスンしている可能性のあるものはすべて、サブスクライブした順序でパブリッシュしたものを取得します。

これを、メディエーター パターンの正式な定義と比較してください。

メディエーター パターンでは、オブジェクト間の通信がメディエーター オブジェクトでカプセル化されます。オブジェクトは互いに直接通信しなくなり、代わりにメディエーターを介して通信します。これにより、通信するオブジェクト間の依存関係が減少し、結合が低下します。

(お気に入りの百科事典から直接抜粋)

これはあなたにとって何を意味しますか?私が知っている誰かがしていたことをしなければ、あなたは大丈夫です。これは絶対に避けたいことです:

  1. モジュールは独自の名前でチャネルを登録します
  2. 他のモジュールは、そのチャネルで公開することにより、文字通りの名前でそれを参照します

これは、理論上は切り離されているため、イベント pub/sub モデルが壊れるところですが、実際には、モジュールの正確な名前を知る必要があります。機能を失うことなくモジュールをその場で交換し、他のモジュールに直接アクセスすることを防止/控えることができるように、イベントを十分に一般的なものにしてください。そうすれば、結合に問題はありません。

不明な点がある場合はお知らせください。明確にするよう努めます。

于 2013-04-12T22:05:45.007 に答える