我正在尝试提出实现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
答案 0 :(得分:3)
每个类都是一个实体,您想要将一些实体元数据与它相关联吗?
听起来Attributes可能是你最好的镜头。
您将定义一个类EntityAttribute
,其成员用于存储描述实体所需的元数据。然后,这将允许您使用[Entity]标记实体类。如果所有字段都是必填字段,请为属性类指定一个需要传递值的构造函数。
然后使用反射来发现实体类。请注意,您只需要执行一次该发现过程然后对其进行缓存,因此反射的性能不应成为问题。