0

かなり大きなSilverlightプロジェクトを設計しています。私はモジュール性を重視しているので、私はMEFPRISMを選んで私を助けました。それはデータに来るときしかし、私は次のような問題に取り組む方法がかなりわからない:WCF Services + EF4.1をモジュール化する方法

は私がshoeshopペットショップためのソフトウェアを利用できるようにwan'tとしましょう。彼らが必要とするデータの90%は同一ですが、shoeshopは、その製品表のためにペットショップとは異なる列を必要とします。

この部分をモジュール化する必要があります。私はそれのために2つのテーブルを作ることはできません。後でブックショップを言うためのモジュールを書くだけでいいからです。

EF側では、一連のクラスが必要です。 ,Shoeshopモジュールに属するShoeTypeと、これらのクラスを公開するのDomainServiceです。クライアント(SL)側では、そのデータを表すビューとViewModelのセットと、他のモジュールのコンテキストへのアクセスを提供する IProductServiceインターフェイスの実装が必要です。

私の質問は以下のとおりです。

  1. どのように異なるDomainServicesを設計するのでしょうか?モジュールごとに1つのサービス?これらのサービスへの書き込みアクセスを他のモジュールに提供していますか?
  2. どのように異なるデータセットを管理しますか? 2つのエンティティタイプShoeTypeのように、すべてのデータセットに対してDbContextを作成するだけですか?

答えて

2

私はあなたがshoeshopとペットショップがほしいと言っているときにそれを選んでいます。

明示的に2つまたは3つの異なるタイプの場合、モジュールごとに異なるサービスのルートに行きます。次に、異なるデータセットを明示的に処理します。

異なる種類の店舗タイプがある場合は、「メタモデル」と呼ばれるものを読んでみてください。ここで実際にデータベースの別のモデルタイプをモデル化します。このように、さまざまな製品を用意することができますが、データベースには製品に基づいて異なる属性があることを表現します。

これの具体例を挙げると、コンテンツ管理システムを想像してみてください。通常、人々は異なるページタイプに対して異なるフィールドを定義することができます。たとえば、「ブログ投稿」にはタイトル、本文、著者があり、「一般ページ」には本文と著者だけがあります。ページ・タイプごとに表を作成することもできますし、データベース・ページを記述して、データベース・スキーマを更新せずに新しいタイプを導入することもできます。

より一般化されたモデルは、ShoeShopまたはPetShopを気にせず、Shopを取得したことが分かり、Shopオブジェクトに記述されているものに基づいて属性を計算します。シナリオでは、ShopをサポートするDataServiceとDbContextが1つだけ必要です。

Shopのようなモデルを想像してみてください。Fieldsコレクションを持っていて、各フィールドには 'Value'、 'Type'などのプロパティがあります。これはちょっとしたマインドベンダーかもしれません。あなたが快適であるかどうかを確認するプロトタイプを欲しがるでしょう - もしあなたが2つの店のタイプで終わるならば、その挑戦は簡単に利益を上回るかもしれません。

気づくべきもう一つの懸念は、すべてを記述するのに十分な豊かなメタモデルを構築することが難しいことです。これはまた、いくつかのORMの方が優れているのですが、それはメタモデルの中でひどいパフォーマンス負荷がかかっていないことを保証するために洗練された熱い負荷能力が必要なためです(わたしはORM for .NET developers called LightSpeedを構築しています。そのメタモデルを使用して、わかりやすいクエリ機能を実現するために熱心な読み込み機能を調整します)。

私はすばらしいGoogleを持っていましたが、メタモデル駆動型アプリケーションの開発についてのガイドに従うのは簡単ではありませんでした。

私の応答を丸めます。あなたはもっと読んでみたいと思うでしょうし、他の人々がより良いアイデアを持っているかもしれませんが、それはすべて柔軟性と複雑さの間のトレードオフになります。

私は役立つことを願っています。

+0

返信いただきありがとうございます。私は約5つまたは6つの異なるシナリオを持っています。私は間違いなくその中にいくつか追加しますが、これまでに読んだことから、それはかなり複雑になります - それで、すべての面白さの価値があるかどうかは分かりません。私は別のコンテキストを持つRiaServiceClassLibrariesのソリューションについて考えています。しかし、このライブラリコンテキスト内のエンティティが別のコンテキスト内のエンティティから継承する方法があるかどうかを確認する必要があります。 – LueTm

関連する問題