Я буду использовать (снова) следующую иерархию классов:
Event
и все следующие классы наследуются от Event:
SportEventType1 SportEventType2 SportEventType3 SportEventType4
Первоначально я разработал класс Event следующим образом:
public abstract class Event
{
public abstract EventType EventType { get; }
public DateTime Time { get; protected set; }
protected Event(DateTime time) {
Time = time;
}
}
с EventType, определяемым как:
public enum EventType {
Sport1,
Sport2,
Sport3,
Sport4
}
Первоначальная идея заключалась в том, чтобы каждый класс SportEventTypeX устанавливал свой правильный EventType. Теперь, когда я думаю об этом, я думаю, что этот подход совершенно неверен по следующим причинам:
- Если я хочу позже добавить новый
Класс SportEventType мне придется
изменить перечисление
- Если я позже решу удалить один
SportEventType, который я чувствую, я не буду
использовать у меня также большие проблемы с
ENUM.
- У меня есть переменная класса в событии
класс, который делает, в конце концов,
предположения о виде
классы, которые будут наследовать от него,
который побеждает цель
наследование.
Как бы вы решили такую ситуацию? Определите в классе Event абстрактное свойство «Description», чтобы каждый дочерний класс его реализовывал? Наличие атрибута (аннотации в Java!) Вместо него задает переменную Description? Каковы были бы плюсы / минусы наличия переменной класса вместо атрибута / аннотации в этом случае? Есть ли еще какое-нибудь более элегантное решение?
Спасибо