メディエーターのデザインパターンはどのようになりますか? 1つのモジュールは、例えば、相互に通信したい場合、単純に中間関数を呼び出すよりも良いメディエーターパターンと中間関数へのダイレクトコール
var mediator = (function(){
var _jobs = {};
function _extractedParams(arguments){
var arr = [];
if (arguments.length > 1){
for (var i=1; i < arguments.length; i++) arr.push(arguments[i]);
}
return arr;
}
function _defaultSubscribeCallback(){
console.log("_defaultSubscribeCallback()");
}
return {
subscribe: function(){
var channel = arguments[0];
if (!_jobs.hasOwnProperty(channel)) _jobs[channel] = [];
_jobs[channel].push({
originalParams: _extractedParams(arguments),
callback: arguments[1] || _defaultSubscribeCallback
});
},
publish: function(){
var channel = arguments[0];
if (!_jobs.hasOwnProperty(channel)) return 0;
for (var i=0; i < _jobs[channel].length; i++){
var subscription = _jobs[channel][i];
subscription.callback.apply(this, subscription.originalParams);
}
return 1;
}
};
}());
var module1 = (function(){
return {
myFunction: function(){
console.log(arguments[0]); //"Hello"
}
};
}());
mediator.subscribe("LOG_IN", module1.myFunction, "Hello");
var module2 = (function(){
return {
afterAuth: function(){
mediator.publish("LOG_IN");
}
};
}());
//After user authentication
module2.afterAuth();
...:このような何か両方の戦略は、同じ利点(デカップリングなど)を持っているように見える一方で、このようなものが
var mediator = (function(){
return {
runFunction: function(){
var params;
if (arguments.length > 1){
params = [];
for (var i=1; i < arguments.length; i++) params.push(arguments[i]);
}
if (arguments[0] && typeof arguments[0] === "function") arguments[0](params);
}
};
}());
var module1 = (function(){
return {
myFunction: function(){
console.log(arguments[0]); //"Hello"
}
};
}());
var module2 = (function(){
return {
afterAuth: function(){
mediator.runFunction(module1.myFunction, "Hello");
}
};
}());
//After user authentication
module2.afterAuth();
?:、最初の例は、(_jobs
にサブスクリプション上に保持することによってオーバーヘッドを生成し、私はそれは、私が含まれていなかったのにこれを緩和するためにunsubscribe()
メソッドを提供しますが、それでも問題は残ります)。 2番目の例よりはるかに複雑です。パフォーマンスの低下を招きます。問題に遭遇する可能性が高くなります。
メディエイターのパターンについて私は何を理解していませんか?単純な結果を達成するために不必要に畳み込まれた方法のように思えるのはなぜですか?なぜ私はこれらのサブスクリプションをすべて浮かべたいのですか_jobs
?
module2はアプローチ2でmodule1と結婚しました。メディエーターは目的を果たしません – user943702