我正在尝试构建一组可重用的EF模型和接口。一个这样的接口称为ICategorised
,如下所示:
public interface ICategorised {
int CategoryID { get; set; }
Category Category { get; set; }
}
以下是Category对象的样子:
public class Category {
public int CategoryID { get; set; }
public string Title { get; set; }
public Type Type { get; set; } // Is 'Type' the wrong type for this?
public string Description { get; set; }
}
我非常喜欢这个原理,但我对于如何最好地获取并为任何实现ICategorised
的对象设置Type感到有点困惑。我的最终目标是能够创建一个对象,例如:
public class Car : ICategorised {
public int CarID { get; set; }
public string CarName { get; set; }
public int CategoryID { get; set; }
public Category Category { get; set; }
}
..并且能以某种方式查询Categories
Type==Car
。
答案 0 :(得分:1)
我认为您应该重新考虑ICategorized
作为存在类型的当前用法。在我看来,实际上这应该是Category
,因为Category
为ICategorized
中的所有内容提供了定义,但目前并未真正实现它。如果您想保留ICategorized
,我会Category
将其作为第一点实施。
其次,我会使Category abstract
因为它不应该直接实例化。然后,您创建的Car
和任何其他分类类将直接从abstract Category
派生。如果你改变你的等级,如上所述,这也会使他们ICategorized
。
在我想到之后,这将实现你的目标,并导致一个更清晰的层次结构,可以为未来的类型扩展。然后,您可以直接在Type
查询,因为每个特定的Category
子类都会设置明确的Type
,例如Car
。
希望有所帮助,或者至少是朝着正确方向迈出的一步。