2009-08-13 4 views
0

私はいくつかのクラスを持つ製品エンティティを持っています(各製品タイプには数千種類の製品タイプのフィールドがあります)。 1つの製品クラスは、「ハンドル長さ」、「ヘッド重量」などのフィールドを有するハンマーであり得る。別のものは、「クッション材料」、「ボックススプリング」などのフィールドを有する椅子であり得る。顧客は、イメージカタログへのキーワードとほぼ同じです。これらは検索フィールドになりますが、製品には製品クラスに対応する特定のフォームがあるため、一般的なテキスト検索は使用しません。に最善のことは次のようになりリポジトリを構築する方法部品の配列を持つエンティティ

Product.Desc["HandleLength"] 
Product.Desc["HeadWeight"] 
Product.Image["FrontFace"] 
Product.Price["RetailCost"] 
Product.Price["ManufacturersSalePrice"] 

:私は単純化でき

Product.Desc.HandleLength 
Product.Desc.HeadWeight 
Product.Image.FrontFace 
Product.Price.RetailCost 
Product.Price.ManufacturersSalePrice 

製品は次のように説明、画像、および価格の分野の3種類の中でブレークダウンリポジトリエンティティを、変化する3つのコンテンツの配列を持つオブジェクトにしますか?このようなオブジェクトを表現するための良いアイデアはありますか?私は何らかの種類の「工場レポジトリ」を検討していました。

答えて

1

複数の製品間で共有することができる場合は、別のテーブルを定義してください。それ以外の場合は、HandleLengthなどをメインテーブルのフィールドとして保存してください。

あなたの特性が大きく、製品に依存する(すなわちによってすべて製品が共有されない少なくとも10個の特性がある)している場合、あなたはクラスのテーブルを作成することを検討すべきである:

classId  parent 
[Tool]   [NULL] 
[Screwdriver] [Tool] 

、クラス-propertyテーブル

classId  property  
[Screwdriver] Type 
[Screwdriver] Size 

、及び値テーブル

ItemId classId  property value 
1  [Screwdriver] Type  PH 
1  [Screwdriver] Size  2 

価格はslowly changing dimensionsとなる傾向があります。

変更する頻度や価格履歴を保存するための要件によっては、保存する方法(type 1type 2など)を選択する必要があります。

+0

驚くべき知覚。私はどのようにテーブル内のクラスを構築するのが好きです。さて、あなたはこれらのクラスを反映するためにリポジトリをどのように設計しますか?リポジトリにメタデータを読み込ませて、ファクトリパターン(ビルダー)のように、その場でオブジェクトをアセンブルしてもらえますか? –

関連する問題