2009-03-05 4 views
3

SQL Data Services flexible entity modelを実装する「最良の」方法を考え出しています。各クラスは、デリバリーされたクラスでもエンティティとして格納できます。*異なるフィールドの各サブクラスで実装する必要があるプロパティを実行する最適な方法は何ですか?

例:すべてのサブクラスは、私は、コレクションのいくつかの種類等を有している(上記と)Entityクラスと基底クラスの両方を有するの方向に向かってい、これまでのところ

string Id 
string Kind 
Dictionary<string, object> Properties 

異なるを持っています

Dictionary<string, Entity> data 

そして、それぞれのサブクラスは

data["EntityKind"].Properties["PropertyName"] 
のようなセットのプロパティをその辞書に追加して、ちょうど/取得する必要があり

しかし、各クラスには1つのエンティティしかないので、階層の各レベルがどこにあるのか正確に知っている何らかの種類のスタック(辞書の代わりに)を使用する必要があるようです。それから、クラス継承がスタックであることが私には分かりました。だから、私はおそらく、これを本当に単純化するいくつかの巨大なOOコンセプトを見逃していたと思いました。何かのように

abstract eachsubclassmusthaveitsown Entity entity 

答えて

3

各クラスはエンティティであり、いくつかのエンティティメタデータを関連付ける必要がありますか?

Attributesのように聞こえる場合があります。

エンティティを記述するために必要なメタデータを格納するメンバを持つクラスEntityAttributeを定義します。そうすればエンティティクラスに[Entity]でタグ付けすることができます。すべてのフィールドが必須である場合は、属性クラスに値を渡す必要がある単一のコンストラクタを与えます。

次に、リフレクションを使用してエンティティクラスを検出します。その発見プロセスを一度行うだけでキャッシュする必要があるので、リフレクションのパフォーマンスは問題ではないはずです。

+0

興味深い。あなたはそれをさらに拡大できますか?エンティティとの唯一の関連付けは属性を介して行われるか、それを含んでいないか、またはそれから派生していないと言っていますか?欠点は、エンティティに変換するためにリフレクションを使用しなければならないということです。エンティティに変換するにはサーバー側のアプリケーションで使用するには時間がかかりすぎますか? –

+0

あなたの最初の声明にあなたの疑問符を気づかれました。はい、各クラスは実体として保存することができます –

+1

反射が「遅い」という提案に注意してください。メソッド呼び出しより10倍または100倍遅いかもしれませんが、メソッド呼び出しは非常に高速です。 –

関連する問題