强制执行必须在*不同*字段中的每个子类实现的属性的最佳方法是什么?

时间:2009-03-05 20:17:22

标签: c# .net oop ssds

我正在尝试提出实现SQL Data Services flexible entity model的“最佳”方式,其中每个类都可以存储为实体,甚至是非法类。

示例:每个子类都有不同的

string Id
string Kind
Dictionary<string, object> Properties

到目前为止,我正在朝着同时拥有一个Entity类(上面的)和一个具有某种集合的基类(如

)的方向前进
Dictionary<string, Entity> data

让每个子类添加到该字典,只需获取/设置属性,如

data["EntityKind"].Properties["PropertyName"]

但是,由于每个类只有一个实体,看起来我应该使用某种Stack(intead of Dictionary),其中层次结构的每个级别都知道它的确切位置。然后我发现类继承就是堆栈,所以我想也许我只是错过了一些真正简化所有这一切的OO概念。像

这样的东西
abstract eachsubclassmusthaveitsown Entity entity

1 个答案:

答案 0 :(得分:3)

每个类都是一个实体,您想要将一些实体元数据与它相关联吗?

听起来Attributes可能是你最好的镜头。

您将定义一个类EntityAttribute,其成员用于存储描述实体所需的元数据。然后,这将允许您使用[Entity]标记实体类。如果所有字段都是必填字段,请为属性类指定一个需要传递值的构造函数。

然后使用反射来发现实体类。请注意,您只需要执行一次该发现过程然后对其进行缓存,因此反射的性能不应成为问题。