問題タブ [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.
language-agnostic - 依存性注入、遅延読み込み、プロキシおよび循環依存性
これは言語に依存しない質問ですが、PHP でサンプル コードを記述します。
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 を認識しています。EmailProxyをUserRepositoryにも渡すと、循環依存になります。
コード/コメントをいただければ幸いです。
ありがとう、
laravel - LaravelのFacadeはFacadeまたはProxyパターンを実装していますか?
私が理解したように、Facade パターンの意図は
サブシステム内の一連のインターフェースに統一されたインターフェースを提供します。Facade は、サブシステムを使いやすくする上位レベルのインターフェイスを定義します。これを使用して、多数の複雑なオブジェクトの相互作用を単一のインターフェースに簡素化できます。
私が理解したことから、パターンの目標はサブシステムの複雑さを隠すことです(たとえば、ファサードクラスはサブシステムの多くのオブジェクトを呼び出します)。
しかし、Laravel の Facade では、(サブシステムではなく)別のクラスを呼び出す1 つのクラスしかありません。私には、より多くのように見えます。誰かが私にこれを明確にするのを助けることができますか.Proxy
Facade
oop - プロキシ パターンとデコレータ パターンの違い
ProxyとDecoratorの違いは何ですか?
私が見る主な違いは、プロキシが構成を使用し、デコレーターが集約を使用すると仮定すると、複数の (1 つ以上の)デコレーターを使用することで、既存のインスタンスに機能を変更/追加 (装飾) できることは明らかです。プロキシには、プロキシされたクラスの独自の内部インスタンスがあり、いくつかの追加機能 (プロキシ動作) を追加して委任します。
問題は、集計で作成されたProxyはまだProxyであるか、それともDecoratorであるかということです。集約を使用してプロキシを作成することは (GoF パターンの定義により) 許可されていますか?
python - Python プロキシ パターンのクラスメソッドが失敗する
私はPythonでプロキシパターンに取り組んでいます。メソッドを使用して、通常のメソッドを適切にプロキシしました__getattr__
。ただし、classmethod は失敗します。
「User」のインスタンスには DBClass に関する情報があるのに対し、「User」クラス定義には DBClass に関する情報がないため、これが失敗することを理解しています。ここで達成しようとしていることを解決するにはどうすればよいですか?
追記: 簡単にするために、継承の他の側面を削除しました。実際の実装では:
DBClass から継承する複数のクラスがあります
DBWrapper から継承する複数のクラスがあります
DBClass-Child のインスタンスは、DBWrapper-Child のコンストラクターに渡されるものです。これは、User クラスのインスタンス化と同様です。
DBClass を制御できません。これはライブラリの一部であり、変更できません。
design-patterns - プロキシがサブジェクト インターフェイスをプロキシ パターンで実装する理由
私はプロキシ パターンを調べていて、Proxy クラスもSubjectインターフェースを実装していることに気付きました。これは具象実装またはSubjectクラスによっても実装されます。
そうする必要がある理由を誰でも提供できますか?
プロキシ クラスに関数を作成し、この関数内でサブジェクトメソッドを呼び出すこともできます。その後、クライアント コードはこのプロキシ クラス関数を呼び出すことができ、適切なメソッドを呼び出すことができます。
design-patterns - プロキシ パターン - クライアントから隠されていない実際のサブジェクト
Proxy についてDoFactoryとWikipedia、そしてもちろんスタック オーバーフローについて読んでいました。を除いて、すべてが明確Real Subject
です。DoFactory では、Proxy は次のように定義されます。
別のオブジェクトへのアクセスを制御するためのサロゲートまたはプレースホルダーを提供します。(太字を追加)
その目的が へのアクセスを制御することである場合Real Subject
、なぜReal Subject
は から隠されませんClient
か?
プロキシの UML ダイアグラムは次のとおりです。
コード例でReal Subject
は、次のように定義されています。
クライアントはのインスタンスを作成し、それを介してProxy
「アクセスを制御」します。Real Subject
しかし、(私が見たいくつかの例から) Client がReal Subject
そのメソッドをインスタンス化してアクセスするのを止めるものは何もありません。それはなぜですか?
java - プロキシ パターンと動的プロキシ パターンの違い
プロキシ パターンと動的プロキシ パターンの違いを理解しようとしています。これまで読んだことからわかったことは、プロキシ クラスのバイトコードがコンパイル時に作成され、動的プロキシでは実行時に作成されるということだけです。私が見逃している別の違いはありますか?そうでない場合、動的プロキシよりもプロキシを優先する理由は何ですか (パフォーマンスの問題を除く)