JSプロキシモード『JavaScriptデザインモードと開発実践』を読みます.
2557 ワード
プロキシモード
プロキシモードは、オブジェクトに対するアクセスを制御するための代替品またはプレースホルダを提供するものです.
プロテクトエージェントと仮想プロキシ
保護エージェント:あるオブジェクトにいくつかの要求を出す必要がある場合、保護エージェントを設定し、いくつかの条件で要求をフィルタリングすることができます.
仮想エージェント:プログラムでは、いくつかの高価なオペレーションがあり得る.この場合は、仮想エージェントを設定して実行することができます.ここでの仮想エージェントは、適切なときに実行されます.
保護エージェントは、対象となるオブジェクトへのアクセスを制御するために使用されますが、JavaScriptでは、保護エージェントを容易に実現することはできません.仮想エージェントは最も一般的なプロキシモードである.
仮想エージェントは、画像のプリロードを実現する.
プリロードされた画像はWeb開発においてよく使われており、非同期的に画像をロードし、一枚のloading画像を利用してビットを占めている.画像のロードが完了したら、画像をimgノードに充填する.
代理の意味
対象に向かう設計原則——単一職責原則.単一職責原則とは、一つの種類(通常は対象と関数なども含む)において、その変化を引き起こす原因は一つしかないはずです.一つの対象が複数の役割を担うと、その対象が大きくなり、変化を引き起こす原因が複数あることを意味します.対象設計への励ましは、行為を細粒度の対象に分布させ、もし一つの対象が負担する役割が多すぎるなら、これらの職責を結合したことになる.この結合は脆弱性と低い凝集の設計を引き起こし、バンド変化が発生した場合、設計は意外な破壊を受ける可能性がある.
仮想エージェントの例では、プロキシモードは、システムに追加の機能を追加し、画像をプリロードする.私たちが実際に必要なのは
キャッシュエージェント
キャッシュエージェントは、いくつかのオーバーヘッドの大きな演算結果の一時的な記憶を提供してもよく、次の演算の際に、渡されたパラメータが以前と一致している場合、直接に前に記憶された演算結果に戻ることができる.
積演算の例
プロキシモードは非常に有用ですが、業務コードを作成するとき、プロキシモードを使用する必要があるかどうかを事前に推測する必要はありません.本当にある対象に直接訪問するのが不便だと気づいたら、代理を作成しても遅くないです.
プロキシモードは実用的な設計モードで、対象に向けた単一職責原則と開放-閉鎖原則をよく説明しています.実際に開発する時、進度の圧力に迫られたり、必要なコードのメンテナンス性を無視したりします.簡単なところでいくつかの設計理念に従ってみて、自分のコード能力を向上させると思います.もちろんデザインのためにデザインしないでください.
Donis better then Perfect
参照
「JavaScript設計モードと開発実践」――曾探
プロキシモードは、オブジェクトに対するアクセスを制御するための代替品またはプレースホルダを提供するものです.
プロテクトエージェントと仮想プロキシ
保護エージェント:あるオブジェクトにいくつかの要求を出す必要がある場合、保護エージェントを設定し、いくつかの条件で要求をフィルタリングすることができます.
仮想エージェント:プログラムでは、いくつかの高価なオペレーションがあり得る.この場合は、仮想エージェントを設定して実行することができます.ここでの仮想エージェントは、適切なときに実行されます.
保護エージェントは、対象となるオブジェクトへのアクセスを制御するために使用されますが、JavaScriptでは、保護エージェントを容易に実現することはできません.仮想エージェントは最も一般的なプロキシモードである.
仮想エージェントは、画像のプリロードを実現する.
プリロードされた画像はWeb開発においてよく使われており、非同期的に画像をロードし、一枚のloading画像を利用してビットを占めている.画像のロードが完了したら、画像をimgノードに充填する.
var myImage = (function(){
var imgNode = document.createElement('img')
document.body.appendChild(imgNode)
return {
setSrc: function(src){
imgNode.src = src
}
}
})()
var proxyImage = (function(){
var img = new Image()
img.onload = function(){
myImage.setSrc(this.src)
}
return {
setSrc: function(src){
myImage.setSrc('loading.gif')
img.src = src
}
}
})()
proxyImage.setSrc('realImage.jpg')
通過するproxyImage
間接的に訪問しました.MyImage
proxyImage
は取引先を制御しました.MyImage
のアクセスは、このプロセスに追加されたいくつかの追加的な動作であり、例えば、真のピクチャがロードされる前に、まず、ccerをloadingピクチャとして設定する.代理の意味
対象に向かう設計原則——単一職責原則.単一職責原則とは、一つの種類(通常は対象と関数なども含む)において、その変化を引き起こす原因は一つしかないはずです.一つの対象が複数の役割を担うと、その対象が大きくなり、変化を引き起こす原因が複数あることを意味します.対象設計への励ましは、行為を細粒度の対象に分布させ、もし一つの対象が負担する役割が多すぎるなら、これらの職責を結合したことになる.この結合は脆弱性と低い凝集の設計を引き起こし、バンド変化が発生した場合、設計は意外な破壊を受ける可能性がある.
仮想エージェントの例では、プロキシモードは、システムに追加の機能を追加し、画像をプリロードする.私たちが実際に必要なのは
MyImage
のsetImage
方法だけです.プリローディングは錦上に花を添えるだけの機能です.この2つの機能をプロキシモードにより独立させ、オープン・クローズの原則に従った.キャッシュエージェント
キャッシュエージェントは、いくつかのオーバーヘッドの大きな演算結果の一時的な記憶を提供してもよく、次の演算の際に、渡されたパラメータが以前と一致している場合、直接に前に記憶された演算結果に戻ることができる.
積演算の例
/******* ******/
var mult = function(){
console.log(' ')
var a = 1
for (var i = 0,l = arguments.length;i
最後にプロキシモードは非常に有用ですが、業務コードを作成するとき、プロキシモードを使用する必要があるかどうかを事前に推測する必要はありません.本当にある対象に直接訪問するのが不便だと気づいたら、代理を作成しても遅くないです.
プロキシモードは実用的な設計モードで、対象に向けた単一職責原則と開放-閉鎖原則をよく説明しています.実際に開発する時、進度の圧力に迫られたり、必要なコードのメンテナンス性を無視したりします.簡単なところでいくつかの設計理念に従ってみて、自分のコード能力を向上させると思います.もちろんデザインのためにデザインしないでください.
Donis better then Perfect
参照
「JavaScript設計モードと開発実践」――曾探