JavaScriptのモジュール + Fascade + Mediatorの組み合わせ
-
27-10-2019 - |
質問
素晴らしい記事を読み終えました http://addyosmani.com/largescalejavascript/
この記事では、JavaScriptアプリケーションのためにモジュール、ファサード、メディエーターを組み合わせる方法について説明します。
記事が説明していることをコーディングできますが、メディエーターにアクセスするためにファサードを使用する必要がある理由がわかりません。
モジュールからメディエーターに直接アクセスできると思います。
アドバイスしてください。
PS:ここでは有効な質問ですか?
解決
そのセクションの参照資料であるPro javaScriptの設計パターンは、次のことを言っているときにあなたの質問に非常にうまく答えます。
ファサードは厳密に必要ではありません。同じタスクを使用せずに完了することができます。これは組織のパターンです。クラスとオブジェクトのインターフェイスを変更して、より便利にすることができます。
他のヒント
Thedric Walkerの答えに基づいて...
これを、おそらくばかげた、類推してください:
あなたはキツツキ(モジュール)であり、家のサポート構造(コア)に横たわっている幼虫(データ)を選びたいと思います。通常、あなたはただペック(実際、キツツキには頭蓋骨の周りに包まれる長い有刺鉄線があります)がインフラストラクチャから幼虫を離れていますが、一部の大工(アプリケーションアーキテクト)は家の外側にファサードを適用しています。しかし、大工は十分に親切でした ポークホール 許可するファサードで キツツキのみ 幼虫にアクセスします。さらに、大工はこれらを作るのに十分賢かった 穴 特定の形状 - キツツキがペックごとにより多くの幼虫を食べるタスクを達成できるようにします。
では、なぜ再びファサードがあるのでしょうか?
ファサードをAddyの投稿に関連付ける - ファサードは サンドボックス その中で、サンドボックスは、1つのモジュールが特定の方法でタスクを達成できるようにする事前定義された効率を提供します。たとえば、ユーザーに書くことを強制するサンドボックスが必要ではありません。
var node = getNode('#errorPanel');
node.innerHTML = 'Field is invalid!';
より良いサンドボックスには次のようなものがあります:
notifyUser.error('Field is invalid!');
ファサード 一方、それらを提供できます スルーウェイ まったく同じように、聞くだけで mediator.fire('error:Validation', 'Field is invalid!')
チャネル。
私が常に使用しているAddyの投稿のファサードは、理論的に単にコアにリクエストを転送することができます。おそらく、それはチャンネルの何かをチェックするでしょう 信号 たとえば、フィンチはそれを病気にする幼虫をつつけようとしていないことを確認するために、例えば例外を投げます。
これが理由です あなたのコアのために別のチャネルメディアム(すなわちメディエーター)を持っていることは理にかなっています。あなたのファサードはコアの唯一の「参照者」であり、モジュールはファサードのみを参照してください. 。別の方法は、することです チームの間で実施します のためのコンベンション 離散チャネル名, 、例: mediator.fire('ready://Core')
& mediator.fire('updated://ToDos/task', taskId)
. 。 facade
聞くでしょう 'updated://ToDos/task'
そして、にリクエストを行います core
- どちらのように見えるかもしれません:
var thus = mediator.installTo(this);
this.on('updated://ToDos/task', function(id){
thus.fire('request://Core/save/todo', id);
thus.fire('user://Core/notify/task/added', id);
});
this.on('response://Core/save/todo', function(err, id){
if(!err){
// ... success -- notify module!
} else {
// ... notify for failure :(
}
});
注意! 行う いいえ リスナーコール内でハンドラーを直接書き込みます!
私 本当 これが役立ち、私が鳥について話すことで票を投じないことを願っています;)