抽象类与枚举(通用OOP)

抽象类与枚举(通用OOP),oop,Oop,我真的找不到如何决定哪个选项是最好的。我有一个类产品,它有一个建议用于喂养的动物,以及其他属性 请注意,我只希望每个物种的推荐值不同,我不关心它们的数字等价物,用有区别的联合表示什么,但由于ORM问题,我不能使用它 由于推荐的可能值因动物de产品目标的类型而异,我不知道以下哪种或任何其他方法是最好的伪代码: Class Product { Id id; String name; RecommendedAge recommendedAge; } AbstractClass

我真的找不到如何决定哪个选项是最好的。我有一个类产品,它有一个建议用于喂养的动物,以及其他属性

请注意,我只希望每个物种的推荐值不同,我不关心它们的数字等价物,用有区别的联合表示什么,但由于ORM问题,我不能使用它

由于推荐的可能值因动物de产品目标的类型而异,我不知道以下哪种或任何其他方法是最好的伪代码:

Class Product {
    Id id;
    String name;
    RecommendedAge recommendedAge;
}

AbstractClass RecommendedAge {
}

Class DogRecommendedAge : RecommendedAge {
    readonly const Int Big;
    readonly const Int Small;
}

Class CatRecommendedAge : RecommendedAge {
    readonly const Int Medium;
    readonly const Int Tiny;
}
或者类似于:

AbstractClass Product {
    Id id;
    String name;
}

Enum DogRecommendedAge {
    Big = 0;
    Small = 1;
}

Enum CatRecommendedAge {
    Medium = 0;
    Tiny= 1;
}

Class DogProduct : Product {
    DogRecommendedAge dogRecommendedAge;
}

Class CatProduct : Product {
    CatRecommendedAge catRecommendedAge;
}

这可能是一个非常愚蠢的问题,但我被卡住了。谢谢大家。

只在运行时而不是在编译时存储建议的年龄怎么样?在您的虚拟环境中:

class RecommendedAges { 
  readonly const RecommendedAge dog = new RecommendedAge(2, 5); // example value
  readonly const RecommendedAge cat = new RecommendedAge(3, 4); // example value 
}

Class Product {
    Id id;
    String name;
    RecommendedAge recommendedAge;
}

Product p = new Product(1, 'dog food', RecommendedAges.dog);