「工場」設計パターンのようなリポジトリ パターンをコーディングするにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/1064378

質問

この質問を書き直そうと思いました(同じ繰り返し)。元々は、EAV/CR データベースの周囲にリポジトリ パターンをラップする方法でした。別のアプローチを試しています。

質問:「工場」設計パターンの方法でデータ リポジトリをコーディングするにはどうすればよいでしょうか? エンティティの数は固定されていますが、これらのエンティティの属性はかなり顧客固有です。彼らはすべて似たような製品を宣伝していますが、各顧客はビジネス モデルに基づいて異なる情報を製品に添付しています。たとえば、廃棄物のスラブの割合を気にする人もいれば、販売されたポンドの量を気にする人もいます。別の顧客を見つけるたびに、多数のフィールドを追加し、多数のフィールドを削除し、各ソリューションを最新の共通リリースに合わせて最新の状態に保つために何時間も費やします。

私は、リポジトリ クラスをファクトリ パターンに配置できると考えました。そうすれば、顧客のタイプがわかれば、どのフィールドが使用されるかがわかります。実用的?もっといい方法?Web フォームは、レイアウト上のフィールドを反映するように変更されたユーザー コントロールを使用します。現在、レイアウトで見つかったフィールドを製品テーブルで見つかったフィールドに「結合」し、次に共通フィールドを CRUD します。

前回の質問内容:

同じエンティティに対して異なるクラスを許可する EAV/CR データ モデルがあります。これは、顧客が大きく異なる製品を所有している製品を追跡します。顧客は製品の「クラス」を定義し、フィールドをロードしてデータを入力できます。例えば、

Product.Text_Fields.Name
Product.Text_Fields.VitaminEContent

これをリポジトリ パターンでラップする方法について何か提案はありますか?

3 つのテーブル EAV があります。Product テーブル、値テーブル、およびフィールド名とデータ型をリストするメタ テーブル (データ型を列挙するのは、Product.Price や Product.Price Meta データなどのテーブルや、Product.Photo などの他のテーブルがあるためです。 ) 顧客は、競合他社との割引率の差やその場での計算など、あらゆる種類の価格を追跡します。

現在、C# で Linq to SQL を使用しています。

編集:

私は以下の「動的クエリ」Linq が気に入っています。私たちの DB の背後にあるアイデアは、ロッカールームのロッカーストレージのようなものです。各アスリート(または顧客)は自分のロッカーを希望する方法で整理し、私たちは彼らに代わってそれを保管します。彼らが必要なことができる限り、ロッカーの中に何が入っているかは気にしません。

とても興味深い...リポジトリに渡されるオブジェクトは動的である可能性がありますか?これは工場出荷時のパターンとほぼ同じで、ほぼ理にかなっています。お客様が独自のクラス定義をテキストファイルに記述し、それを継承してDBに保存することは可能でしょうか?

役に立ちましたか?

解決

私の理解では、リポジトリ パターンはアプリケーションからデータベースの物理実装を抽象化します。データを異なるデータ ストアに保存する予定ですか?Linq to SQL に満足している場合は、非常に複雑に見えるため、おそらくこの方法で抽象化する必要はないことをお勧めします。そうは言っても、EAV スタイルのリポジトリを提供することはわかります。クエリには、テーブル、フィールド タイプ、およびフィールド名を、必要な条件とともに渡す必要があります。これにより、求めている抽象化が提供される可能性があります。

実際にアプリケーションからストレージを抽象化しているわけではないので、これが最も厳密な意味でリポジトリ パターンと言えるかどうかはわかりません。それは利益と努力の間でのトスアップになるだろうが、そこで私は助けることができない。

Codeplex の動的データ プレビューにある Dynamic Linq 拡張機能を確認してみるとよいでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top