問題タブ [proxy-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
550 参照

language-agnostic - 依存性注入、遅延読み込み、プロキシおよび循環依存性

これは言語に依存しない質問ですが、PHP でサンプル コードを記述します。

2 つのクラスがあります。

  1. ユーザークラス
  2. UserRepositoryクラス

UserRepository クラスは、DB とのやり取りを処理し、必要な User を User オブジェクトにロードして返します。

User クラス内に、そもそもロードされないメール属性があり、必要なときにいつでもデータベースから遅延ロードされるとします。ただし、UserクラスはUserRepositoryクラスを認識してはならないため、ここで電子メール プロキシを作成します。UserRepositoryを認識しており、電子メールが必要な場合は、UserRepositoryから要求します。

これまでのコードは次のとおりです。

ユーザークラス

UserRepository クラス

EmailProxy クラス

そして、ここに使用例があります:

ここまでは順調ですね。しかし、ここがあなたの助けが必要なトリッキーな部分です。その性質上、UserRepository は、DataBase から User オブジェクトをフェッチし、User オブジェクトを構築して返す責任を負う必要があります。以下のように:

私の質問は、UserRepositoryによって作成されたUserオブジェクトにEmailProxyを渡す方法です。

  • UserProxy インスタンスを UserRepository に注入して、新しく作成された User オブジェクトに注入できるようにしますか?

  • これに依存性注入コンテナーを使用しますか?

  • 工場を利用しますか?

編集

EmailProxyはすでにUserRepository を認識しています。EmailProxyUserRepositoryにも渡すと、循環依存になります。

コード/コメントをいただければ幸いです。

ありがとう、

0 投票する
1 に答える
860 参照

laravel - LaravelのFacadeはFacadeまたはProxyパターンを実装していますか?

私が理解したように、Facade パターンの意図は

サブシステム内の一連のインターフェース統一されたインターフェースを提供します。Facade は、サブシステムを使いやすくする上位レベルのインターフェイスを定義します。これを使用して、多数の複雑なオブジェクトの相互作用を単一のインターフェースに簡素化できます。

ここに画像の説明を入力

私が理解したことから、パターンの目標はサブシステムの複雑さを隠すことです(たとえば、ファサードクラスはサブシステムの多くのオブジェクトを呼び出します)。

しかし、Laravel の Facade では、(サブシステムではなく)別のクラスを呼び出す1 つのクラスしかありません。私には、より多くのように見えます。誰かが私にこれを明確にするのを助けることができますか.ProxyFacade

0 投票する
10 に答える
48247 参照

oop - プロキシ パターンとデコレータ パターンの違い

ProxyDecoratorの違いは何ですか?

私が見る主な違いは、プロキシ構成を使用し、デコレーター集約を使用すると仮定すると、複数の (1 つ以上の)デコレーターを使用することで、既存のインスタンスに機能を変更/追加 (装飾) できることは明らかです。プロキシには、プロキシされたクラスの独自の内部インスタンスがあり、いくつかの追加機能 (プロキシ動作) を追加して委任します。

問題は、集計で作成されたProxyはまだProxyであるか、それともDecoratorであるかということです。集約を使用してプロキシを作成することは (GoF パターンの定義により) 許可されていますか?

0 投票する
0 に答える
124 参照

python - Python プロキシ パターンのクラスメソッドが失敗する

私はPythonでプロキシパターンに取り組んでいます。メソッドを使用して、通常のメソッドを適切にプロキシしました__getattr__。ただし、classmethod は失敗します。

「User」のインスタンスには DBClass に関する情報があるのに対し、「User」クラス定義には DBClass に関する情報がないため、これが失敗することを理解しています。ここで達成しようとしていることを解決するにはどうすればよいですか?

追記: 簡単にするために、継承の他の側面を削除しました。実際の実装では:

  • DBClass から継承する複数のクラスがあります

  • DBWrapper から継承する複数のクラスがあります

  • DBClass-Child のインスタンスは、DBWrapper-Child のコンストラクターに渡されるものです。これは、User クラスのインスタンス化と同様です。

  • DBClass を制御できません。これはライブラリの一部であり、変更できません。

0 投票する
2 に答える
107 参照

design-patterns - プロキシがサブジェクト インターフェイスをプロキシ パターンで実装する理由

私はプロキシ パターンを調べていて、Proxy クラスSubjectインターフェースを実装していることに気付きました。これは具象実装またはSubjectクラスによっても実装されます。

そうする必要がある理由を誰でも提供できますか?

プロキシ クラスに関数を作成し、この関数内でサブジェクトメソッドを呼び出すこともできます。その後、クライアント コードはこのプロキシ クラス関数を呼び出すことができ、適切なメソッドを呼び出すことができます。

0 投票する
2 に答える
418 参照

design-patterns - プロキシ パターン - クライアントから隠されていない実際のサブジェクト

Proxy についてDoFactoryWikipedia、そしてもちろんスタック オーバーフローについて読んでいました。を除いて、すべてが明確Real Subjectです。DoFactory では、Proxy は次のように定義されます。

別のオブジェクトへのアクセスを制御するためのサロゲートまたはプレースホルダーを提供します。(太字を追加)

その目的が へのアクセスを制御することである場合Real Subject、なぜReal Subjectは から隠されませんClientか?

プロキシの UML ダイアグラムは次のとおりです。

プロキシ UML

コード例でReal Subjectは、次のように定義されています。

クライアントはのインスタンスを作成し、それを介してProxy「アクセスを制御」します。Real Subject

しかし、(私が見たいくつかの例から) Client がReal Subjectそのメソッドをインスタンス化してアクセスするのを止めるものは何もありません。それはなぜですか?

0 投票する
2 に答える
4329 参照

java - プロキシ パターンと動的プロキシ パターンの違い

プロキシ パターンと動的プロキシ パターンの違いを理解しようとしています。これまで読んだことからわかったことは、プロキシ クラスのバイトコードがコンパイル時に作成され、動的プロキシでは実行時に作成されるということだけです。私が見逃している別の違いはありますか?そうでない場合、動的プロキシよりもプロキシを優先する理由は何ですか (パフォーマンスの問題を除く)