Proxyパターン - TypeScriptでのアクセス制御
オブジェクトへのアクセスを制御するProxyパターンをマスターしましょう。キャッシング、遅延ロード、アクセス制御、ロギング、仮想ProxyのTypeScript実装例。
Structural
詳細な説明
Proxyパターン
Proxyパターンは、別のオブジェクトへのアクセスを制御するための代理またはプレースホルダーを提供します。Proxyは実オブジェクトと同じインターフェースを持ち、クライアントに対して透過的です。
Proxyの種類
- 仮想Proxy: 高価なオブジェクトの作成を実際に必要になるまで遅延(遅延ロード)
- 保護Proxy: パーミッションや認証に基づいてアクセスを制御
- キャッシングProxy: 高価な操作の結果を保存し、繰り返しのリクエストにはキャッシュ値を返す
- ロギングProxy: デバッグや監査のために実オブジェクトとのすべてのインタラクションを記録
- リモートProxy: 異なるアドレス空間のオブジェクトを表現(ネットワークProxy)
JavaScript Proxy API
TypeScriptはProxyオブジェクトを通じてファーストクラスのProxyサポートを持っています。ネイティブのProxy APIにより、プロパティアクセス、設定、関数呼び出しなどをインターセプトできます。
Proxy vs Decorator
どちらも同じインターフェースでオブジェクトをラップします。違いは意図です: Proxyはアクセスを制御します(誰が呼び出せるか、いつロードするか、結果をキャッシュするか)。Decoratorは新しい振る舞いを追加します(タイムスタンプ、暗号化、フォーマット)。
パフォーマンスの考慮
Proxyは間接参照のオーバーヘッドを追加しますが、キャッシングと仮想Proxyは通常、高価な操作を回避することで全体的なパフォーマンスを向上させます。
ユースケース
Proxyは、Webページでの画像遅延ロード、APIレスポンスキャッシング、リクエスト転送前にパーミッションをチェックするアクセス制御ミドルウェア、データベース接続プーリング、本番サービス用のロギング/監視ラッパーで広く使用されています。