カタログ内の各製品タイプの複雑な詳細を可能にする製品カタログを作成したいと思います。製品タイプには、それらに関連付けられた非常に異なるデータがあります。一般的なデータのみを含むもの、データのいくつかの追加フィールドを含むもの、その製品タイプに固有の多くのフィールドを含むものがあります。新しい製品タイプをシステムに簡単に追加し、それらの構成を尊重する必要があります。これらの製品のデータモデルを設計する方法、および永続性と取得を処理する方法に関するヒントが大好きです。
一部の製品は非常に一般的であり、それらの製品を編集するために共通のUIを使用する予定です。拡張可能な構成が関連付けられている製品は、編集用に作成された新しいビュー(およびコントローラー)を取得します。すべてのカスタム製品には独自のモデルが定義されていますが、共通の基本クラスを共有していると思います。基本クラスは、カスタムフィールドを持たない汎用製品を表します。
処理する必要のある製品の例:
- ジェネリック製品
- 説明
- 電球
- 説明
- タイプ(蛍光灯、白熱灯、ハロゲン、LEDの列挙型)
- ワット数
- スタイル(洪水、スポットなどの列挙型)
- 冷蔵庫
- 説明
- 作る
- モデル
- スタイル(ドメインモデルに列挙型を含む)
- 浄水器情報
- 部品番号
- 説明
システムで利用可能な製品タイプを見つけるためにMEFを使用することを期待しています。製品タイプのモデル、ビュー、およびコントローラーを含むアセンブリを作成し、それらのアセンブリをビンにドロップして、アプリケーションに新しい製品タイプを検出させ、ナビゲーションに表示することを計画しています。
SQL Server 2008を使用して、これらのさまざまなタイプの製品を格納し、データベーススキーマを拡張せずに新しいタイプを追加できるようにするための最良の方法は何でしょうか。
データベースからデータを取得する場合、これらの多態的なエンティティを正しいドメインモデルに変換するための最良の方法は何ですか?
更新と明確化
内部プラットフォーム効果を回避するために、(そのタイプの製品を格納するために)すべての製品タイプのデータベーステーブルがある場合でも、製品タイプにまたがるすべての製品を取得する方法が必要です。それはどのように達成されますか?
私は彼のSharePointリファレンスについてNikhilkとより詳細に話しました。具体的には、彼はこれについて話していました:http: //msdn.microsoft.com/en-us/library/ms998711.aspx。それは実際にはかなり魅力的なようです。XMLを解析する必要はありません。また、データに対する単純で高速なクエリを可能にするために実行できるインデックスがいくつかあります。たとえば、行の最初のint列が電球を表す場合のワット数であることがわかると、「75ワットの電球をすべて検索する」と言えます。アプリ層の何か(NHibernate?)は、製品タイプからuserdataスキーマへのマッピングを定義します。
製品ごとに多くの行が発生する可能性があるため、プロパティテーブルを持つスキーマに反対票を投じました。これはインデックスの問題につながる可能性があり、さらにすべてのクエリは基本的にデータをピボットする必要があります。