問題タブ [proxy-classes]
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.
design-patterns - 内部クラスでのみ使用されるいくつかのメソッドを世界に隠します
短い質問
C++ドメイン モデルが 1 つあります。内部 API で使用されるいくつかのメソッドと、その他のパブリック メソッドがあります。これらの API メソッドを公開したくありません。これらのメソッドを隠すためにプロキシ パターンを使用することを考えています。これは良い考えだと思いますか?これを達成するための設計パターンはありますか?
長い例
ソフトウェアで制御できるが、一部の技術者が手動で動かすこともできるロボット アームが遠隔地にあるとします。それは、それが保持しているオブジェクトの種類を知ることを可能にするいくつかのセンサーを持っています. 私のプロジェクトでは、これはまったく異なるものですが、これは例として使用しているだけです。したがって、 RoboticHeldObject抽象クラスを含む1 つのRoboticArmクラスが必要です。RoboticArmは、腕を動かすだけでなく、どの RoboticHeldObject を保持しているかを知らせます。ただし、オブジェクトをピックアップしてリリースすることはできません。これは、ロボットを操作する技術者によって決定されます。したがって、次のようになります。
実装は非常に複雑なので、実際に難しい作業を実行する外部クラスRobotServiceを使用します。ただし、実際にRobotServiceを使用するのはRoboticArmであり(したがって機能を備えています)、残りの世界は RobotService について何も知らないため、Anemic Domain Model ではありません。
ここでの問題は、 releaseObject()とholdObject()は、ここではRobotServiceのみが使用する API メソッドです。これらは、技術者がアームに保持されているオブジェクトを解放するか、新しいオブジェクトを配置するたびに、RobotServiceによってのみ呼び出されます。したがって、ネットワーク イベントがRobotServiceによって処理されるときに呼び出されます(アームは離れた場所にあるため、イベントはネットワーク経由で受信されることに注意してください)。例えば:
私のアプローチ
これらのメソッドを非表示にするには、RoboticArm の名前をRealRoboticArmに変更し、 RoboticArmプロキシ クラスを作成します。
RoboticArmはプロキシであるため、RoboticArm::heldObject() は realArm->heldObject()、RoboticArm::moveUp() realArm->moveUp() などを呼び出します。
RobotServiceはRealRoboticArmインスタンスへのポインタを持つため、 releaseObject () などの API メソッドを呼び出すことができます。ただし、アプリケーションの他の部分は、 RealRoboticArm へのポインタを持たないため、 RoboticArm のメソッドしか使用できません。したがって、 releaseObject()とholdObject()は、効果的に聴衆から隠されます。
質問
これがプロキシ パターンなのかアダプター パターンなのかは 100% わかりません。これは、そのようなシステムをモデル化する適切な方法だと思いますか? より良いパターンはありますか?
c# - インターフェイスを実装するためのWebサービスプロキシクラス
Webサービスアクセスとクライアントアプリケーションのビジネスレイヤーへの「直接」アクセスを簡単に切り替えるために、(WCFではなく)Web参照用に生成されたプロキシクラスに共通のインターフェイスを実装させる方法を探しています。
ただし、カスタムタイプ(CustomSerializableType
以下の例の例)は、生成されたプロキシクラスでは参照されません。代わりに、新しい同一の型が生成されるため、プロキシクラスがインターフェイスを実装できなくなります。
生成されたプロキシクラスにこれらのタイプを参照させる方法はありますか、それとも私はこれをすべて間違っていますか?代わりに、WebサービスをWCFサービスに変換することを検討する必要がありますか?
詳細
私たちのソリューションは、次の4つのプロジェクトで構成されています。
- ビジネスライブラリ(ビジネスロジックを含み、データストアにアクセスします)
- 共通ライブラリ(を含む共通機能を含む
CustomSerializableType
) - Webサービス(リモートクライアントとビジネスレイヤー間のプロキシとして機能します)
- Windowsアプリケーション
私たちのクライアントは、Windowsアプリケーションが2つの異なるモードで実行できることを望んでいます。
- ローカルモード。アプリケーションはビジネスライブラリを直接使用してデータにアクセスします。
- アプリケーションがWebサービスと通信してデータにアクセスするリモートモード
これを行うために、共通ライブラリにあり、すべてのビジネスメソッドを含むインターフェイスIBusinessを作成しました。
インターフェース
ビジネスレイヤー
ウェブサービス
生成されたプロキシクラス(読みやすくするために省略された大量のコード)
ruby-on-rails - ActiveRecordモデルを使用したプロキシオブジェクト-method_missingが機能しない場合がある
私は自分のアプリケーションのモデルを、動作を定義する他のオブジェクトへのプロキシとして使用してきました。
そのため、BoxBehaviorオブジェクトにすべてのメソッドを実装し、boxインスタンスでメソッドを呼び出すと、関連付けられたboxbehaviorオブジェクトに呼び出しをリダイレクトします。ボックスオブジェクトから合計を取得して保存する購入モデルにフックを作成しようとした場合を除いて、すべて正常に機能します。
ボックスが関連付けられている購入オブジェクトを保存しようとすると、次のエラーが発生します。
そして、私は次に何をすべきかについての手がかりを持っていません...私がboxクラスに直接totalメソッドを実装するとき、それはうまくいきます...これを解決するために私は何ができますか?プロキシが正しく機能していませんか?
visual-studio - Webサービスを再利用しますが、カスタムエンドポイントを使用します
Visual Studioのエンドポイントを持つWebサービスhttp://api.domain_a.com/
を使用しており、サービスを簡単かつシンプルに操作するためのプロキシクラスを簡単に生成できます。
しかし、ユーザーが自分のサービスを使用できる(そして自分のデータではなく自分のデータにアクセスできる)方法を作成したいと思います。また、サービスのベースURLをオンザフライで変更できる方法があるかどうかを知りたいと思いました。 。
例として
プロジェクトにWeb参照を追加してプロキシクラスを生成しますが、リクエストごとに、ユーザー設定を取得するユーザー名があります(魔女にはURLが含まれています)。http://domain_b.com/api
Web参照を追加するときに使用した元のプロキシの代わりにドメインを使用している生成されたプロキシ?
手動でサービスを呼び出す必要がありますか?XMLデータの送受信?または、新しいURLを指すために使用できる「スイッチ」がありますか?
c# - WCF プロキシ クラスの派生インターフェイス
問題:
非常によく似た 2 つ (またはそれ以上) のクラスがあります。あるクラスのプロパティは、他のクラスのプロパティのサブセットです。より具体的には、プロパティ名とセマンティクスは同じですが、それらの型は必ずしも同じではありません。ただし、同じ名前のプロパティの型が異なる場合、これらの型は(同じ意味で)非常に似ています。
同様のクラスのすべてのセットに共通のインターフェイスを派生させて、異なるクラスのインスタンスを同じ方法で使用できるようにしたいと考えています。
私のクラスには 100 を超えるプロパティがあるため、可能であればインターフェイスを手動で作成することは避けたいと考えています。
インターフェイスは、すべての類似クラスのすべてのプロパティ セットの結合を包含する必要があります。(特定のオブジェクトに存在しないプロパティが読み取られると、null
返される必要があります。そのような未定義のプロパティが設定されている場合、何も起こらないはずです。)したがって、インターフェイスはもはや適切ではなく、むしろラッパーであると思いますクラスか何か違う...
環境:
WCF を使用して Web サービス ( CreateSalesOrder ) を使用しています。サービスの入力メッセージには、 Request_Item、Request_ShipToLocationなどの他の XSD タイプの子で構成されるXML スキーマ タイプRequest_SalesOrderの要素が必要です。
出力メッセージには、スキーマ タイプResponse_SalesOrderの要素が含まれます。これには、スキーマ タイプResponse_Item、Response_ShipToLocationなどの同様の子要素と、タイプResponse_PriceTotal の要素PriceTotalなど、いくつかの追加要素があります。
ASP.Net MVC を使用して、Web サービスを使用するための UI を構築したいと考えています。したがって、販売注文を作成するためのフォームをレンダリングするビューがあります。Web サービス要求を送信した後、フォーム フィールドを Web サービス応答メッセージからの値で更新する必要があります。
フォーム フィールドは、プロキシ クラスのプロパティにアクセスするビュー モデルにバインドされます。フォームが送信されると、ビュー モデルはプロキシ クラス A のインスタンスを更新する必要がありますが、フォームが応答メッセージの値でレンダリングされる場合、ビュー モデルはプロキシ クラス B のインスタンスから読み取ります。
java - RMI呼び出しを介してパラメーターとしてプロキシを受信するときに実際のオブジェクトを取得するにはどうすればよいですか?
RMIを使用して通信するサーバーとクライアントがあり、リモートインターフェイスを実装するいくつかのクラスがあります。
クライアントは問題なくプロキシを受信しますが、このプロキシオブジェクトの1つを別のRMIメソッド呼び出しのパラメーターとして送信すると、サーバーのメソッドは、常駐する「実際のオブジェクト」の参照ではなく、プロキシの参照を受信します。同じJVMで。
サーバーでパラメーターとして実オブジェクトインスタンスを受け取ることは可能ですか(つまり、JVMに変換を自動的に処理させることによって)?ローカルオブジェクトへのプロキシを受信することは、私にはあまり意味がありません。
前もって感謝します!
groovy - groovyのプライベートコンストラクターを使用してクロージャーマップをオブジェクトにキャストします
私はgroovyを使用して、テストケースのモッククラスをいくつか作成しています。私は基本的に、テストケースを実行できるように、すべてのメソッドがnullを返すダミーオブジェクトを作成しています。
私は次の構文を使用しています:
したがって、ここでは、シングルトンインスタンスを偽のファクトリオブジェクトで上書きしようとしています。問題は、MessageFactoryのコンストラクターがたまたまプライベートメソッドであるということです。上記のコードを実行すると、不正なアクセス例外が発生します。groovyでプロキシを作成し、プライベートコンストラクターの問題を克服できる方法はありますか?
java - 動的プロキシから元のオブジェクトをアンラップする方法
動的プロキシをアンラップして元のオブジェクトを取得するための最良の方法は何ですか? 動的プロキシは次を使用して作成されましたjava.lang.reflect.Proxy.newProxyInstance()
ありがとうございました。
c# - 「RealProxy.GetTransparentProxy()」が「null」を返すのはどのような場合ですか?
http://msdn.microsoft.com/en-us/library/system.runtime.remoting.proxies.realproxy.gettransparentproxy%28v=VS.100%29.aspxのドキュメントは、GetTransparentProxy
が返されるシナリオを示していません。null
しかし、私はnull
それを呼び出すと戻ってきます。
この動作はどのような状況で発生しますか?
c# - 最初にEFコードのCTP5のProxyCreationEnabledをオフにすることの欠点は何ですか
私の WCF サービスがコード ファースト モデルからクラスを返すことができる唯一の方法は、以下のコードProxyCreationEnable
をfalse
使用して を に設定することです。
これを行うことのマイナスの結果は何ですか?利点の 1 つは、少なくともこれらの動的な型をシリアル化して、WCF を使用してネットワーク経由で送信できることです。