0

我正在尝试构建一组可重用的 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。我的最终目标是能够创建一个对象,例如:

public class Car : ICategorised {
    public int CarID { get; set; }
    public string CarName { get; set; }
    public int CategoryID { get; set; }
    public Category Category { get; set; }
}

.. 并且能够以某种方式查询Categorieswhere Type==Car

4

1 回答 1

1

我认为您应该重新考虑当前ICategorized作为 Existential Type 的用法。在我看来,这实际上应该是Category,因为它为其中Category的所有内容提供了定义,ICategorized但目前并没有真正实现它。如果你想保留ICategorized,我会把Category它作为第一点来实施。

其次,我会做Category abstract,因为它不应该直接实例化。然后,您Car和您创建的任何其他分类类将直接从abstract Category. ICategorized如果您如上所述更改层次结构,这也会使它们固有地产生。

这将实现我所想的你,并导致一个更清晰的层次结构,可以为未来的类型扩展。然后,您可以Type直接查询,因为每个特定Category的子类都有一个明确的Type集合,例如Car.

希望这会有所帮助,或者至少是朝着正确方向迈出的一步。

于 2012-12-10T09:39:36.603 回答