2011-07-18 10 views
3

「汎用」テーブルを持つレガシーデータベースにアクセスする必要があり、変更する権限がありません。私が作業している顧客データによっては、テーブル間の関係が異なる場合があります。したがって、customerAは顧客番号だけで注文テーブルに参加することができ、一方CustomerBは顧客番号と日付によって注文テーブルに加入することができる。 CustomerCはオーダーテーブルには参加できませんが、別のテーブルには参加できません。プロキシクラスはクラスラッパーと同じですか?

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

ありがとうございます。

答えて

2

問題を手近に扱うには、いくつかの方法があります。

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

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

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

+0

次に、私の次の質問は、ラッパーを提案すれば、どのようにEntity Frameworkを使ってこれを実装できますか?私はスタックのオーバーフローに関する別の質問としてそれを投稿する必要がありますか? –

+0

スタックオーバーフローは非常に細分化されており、より多くのEF固有の回答が得られるので、別の質問を検討します。スキーマの難しい部分は異なる主キーですが、各顧客が一度に1つのスキーマしか使用しない場合は、インストールの選択肢として設定し、インスタンスごとに1つだけ使用します。これはEFとうまくいくでしょう。 –

3

いいえ、それらは同じではありません。ウィキペディアでProxy patternWrapper patternをご覧ください。

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

ラッパーは、元のオブジェクトとは異なるように見えるオブジェクトですが、通常は同じです。

0

実装を見ると、プロキシとラッパークラスは非常に似ている可能性があります。しかし、これらの用語は、異なるメーニングで頻繁に使用されます。

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

ラッパーは、何らかの理由で別のオブジェクトを隠すオブジェクトです。通常、これはインターフェイスが互換性がない場合に行われます。正しい機能を持っているが間違ったインタフェースを持つオブジェクトは、インタフェースを変換する別のオブジェクトにラップされます。ウィキペディアから

1

:「プロキシは、その最も一般的な形で、何か他のものへのインタフェースとしてクラスの機能である」

ProxyPattern

プロキシ:が、それは「だ、「インターフェース」ですあなたが何かを要求し、それがあなたが望むものを返す、あなたが好きならば、「ブラックボックス」。

ラッパー:は、カプセル化によって基本的に機能を隠すエンティティであるため、呼び出し側に独自のメソッドを公開することで、実際のコンポーネント/別のクラス/ ...を隠すため、ラッパーのユーザーにはどんなものなのかわかりません本当にの作品です。

これが役に立ちます。

よろしくお願いいたします。

関連する問題