0

まずは、私の悪い英語を申し訳ありません! 多くのSilverlightチュートリアルでは、次のように表示されています。Silverlightのモデルマッピングとリポジトリパターンに関する質問

たとえば、Productなどのサーバー側にモデルがあります。 WebサービスにはメソッドIlist GetProducts()があります。 サービス参照を追加するときに生成されるクライアント側のProductクラス。次に、このProductモデルをviewmodelsとxamlで使用します。 しかし、 "名前"プロパティが "NameProperty"になるか、誰かがWebサービスを他のものに変更しようとすると、誰かがサーバー側または製品モデルの変更を変更するとどうなりますか? Productプロキシクラスもクライアント側で変更され、次にProductクラスを使用するビューモデルとバインディングなどを「リフレッシュする」必要があります。

このソリューションについては何?:

のSilverlight側で私はのviewmodelsとXAMLを使用するすべてのプロパティを含むIProductインターフェースを、持っています。 IList GetProducts()メソッドを持つIRepositoryインターフェイスを作成します。私はwcfサービスからデータを取得するWCFRepositoryのようなこのインタフェースを実装します。 GetProductメソッドの実装は、すべての製品をIProductの実装にマップします。IProductの実装にプロパティをコピーするだけです。したがって、サーバー側の製品が変更されたときは、WCFRepositoryのマッピングを変更するだけで済みます。また、WCFサービスを他のサービスに変更した場合、GetResositoryを記述し、GetProductsメソッドの実装でマッピングを作成するだけで済みます。 このソリューションでは、ビューとビューモデルは変更されません。

私のソリューションはどうですか?私は正しい方向に行くつもりですか?これについての良いサンプル、チュートリアル、パターンはありますか?どんなキーワードも良いでしょう! :)ありがとう!

答えて

0

一般的に私はあなたのアイデアは良いより悪いと思う。まず、あなたのサービスのインターフェースが不安定であると言います。あなたのアプリケーションとサービスが単一のプログラムプロセスの一部である場合、誰かがあなたのサービスプロパティ名を変更してアプリケーションを修正したくないという奇妙なことは、一緒に結びついてしまうからです。

あなたのアプローチは、維持しなければならないチェーン内の不要なリンクのように見え、通常は実際のサービスへの代理となります。目標は「定数」を提供することです(リポジトリのインターフェースを変更する必要がある場合は、デフォルトのサービスで必要な変更の可能性が非常に近く、私は、サービスインタフェースがあなたのリポジトリサービスよりも多くの機能を含むようになると、それらを移動してミラー機能を複製する必要があると信じています。

一般的には、多くのメリットはありませんが、サーバー側でX2の仕事を頻繁にやらなくてはなりません。

関連する問題