3

「汎用」テーブルを含むレガシー データベースにアクセスする必要がありますが、それを変更する権限がありません。扱っている顧客データによっては、テーブル間の関係が異なる場合があります。したがって、customerA は顧客番号のみで注文テーブルに参加でき、CustomerB は顧客番号と日付で注文テーブルに参加できます。CustomerC は order テーブルにまったく参加せず、別のテーブルに参加する場合があります。

そこで、CustomerA 用に 1 つ、CustomerB 用に 1 つ、CustomerC 用に 1 つのオブジェクト グラフを作成したいと考えています。それぞれのラッパークラスを作成することを考えましたが、プロキシを研究しています。そうは言っても、プロキシ クラスについて書かれた例を見ると、それらはラッパー クラスと同じように見えます。したがって、私の質問は、ラッパー クラスと同義のプロキシ クラスです。

ありがとうございました。

4

4 に答える 4

3

いいえ、それらは同じではありません。WikipediaのProxy patternWrapper patternをご覧ください。

基本的に、プロキシは元のオブジェクトと同じように見える (つまり、同じインターフェースを実装する) オブジェクトですが、それ以上のことを行います。

Wrapper は、元のオブジェクトとは見た目が異なるオブジェクトですが、通常は同じことを行います。

于 2011-07-18T21:01:44.017 に答える
2

当面の問題を処理する方法はいくつかあります。

1 つは、共通のドメイン モデルにマップすることです。これは、基本的な動作が同じであれば問題なく機能しますが、詳細についてはうまく機能しない可能性があります (クライアントの種類ごとにキーが異なります)。

もう 1 つは、共通ビットを基本クラスに移動してから、状態のさまざまな仕様 (さまざまなプロパティ) またはさまざまな動作 (主キーのみの ID など) を継承することです。これは異なる動作と状態の両方であると考えると、これは使用できる方向です。

さて、パターン。プロキシ パターンは、新しいオブジェクトが別のオブジェクトの動作と状態の一部を提供できるが、オブジェクトではないパターンです。代理としてあなたに投票する人が何を意味するかのように考えて、それをソフトウェアに関連付けてください。ラッパーは通常、基になるオブジェクトとは異なる面を提示するために使用されるため、ラッパーのようには考えません。これは、基になるオブジェクトで何かを非表示にする必要があるか、オブジェクトの上にさらに動作を追加する必要があるためです。プロキシ パターンはさまざまなキーには役に立ちません。ラッパーで可能ですが、これが最も簡単な方法であるとは確信していません。

于 2011-07-18T21:05:05.940 に答える
1

ウィキペディアから:「最も一般的な形式のプロキシは、何か他のものへのインターフェイスとして機能するクラスです」

プロキシパターン

Proxy:は「インターフェース」です。必要に応じて「ブラックボックス」であり、そこから何かを要求すると、必要なものが返されます。

ラッパー:基本的にカプセル化することによって機能を隠すエンティティであるため、その内部に「実際の」コンポーネント/別のクラス/...を隠し、呼び出し元に独自のメソッドを公開するため、ラッパーのユーザーはどのオブジェクトでそれが本当にうまくいきます。

お役に立てれば。

よろしく。

于 2011-07-18T21:04:20.760 に答える
0

実装を見ると、プロキシとラッパー クラスは非常に似ているかもしれません。ただし、用語はしばしば異なる意味で使用されます。

プロキシは、実際のオブジェクトのように動作するオブジェクトですが、そうではありません。代わりに、すべての呼び出しを実際のオブジェクトに転送し、リモート オブジェクトへのアクセスの複雑さを隠します。プロキシ オブジェクトの例は、Visual Studio によって生成された WCF クライアントです。クライアントはそれらを実際のサービス コードであるかのように呼び出し、プロキシが通信を処理します。

ラッパーは、何らかの理由で別のオブジェクトを隠すオブジェクトです。通常、これはインターフェイスに互換性がない場合に行われます。適切な機能を備えているが、インターフェイスが間違っているオブジェクトは、インターフェイスを変換する別のオブジェクトにラップされます。

于 2011-07-18T21:02:27.603 に答える