Ведущий разработчик в моем текущем проекте запрещает мне использовать любые перечисления. Он утверждает, что перечисления - это просто проблемы. Я могу использовать его только в том случае, если я вынужден - когда общаюсь с внешними приложениями/библиотеками, которые требуют перечисления. Он говорит, что у меня должен быть объект для каждого государства. Например, у нас есть игра с объектом Soldier. Поэтому у меня должны быть объекты: - RunningSoldier - SittingSoldier - StandingSoldier
Он прав? Я этого не чувствую. У меня есть только такие аргументы, как я не хочу писать так много классов.
Благодарю!
Для вашего случая перечисления плохие. Потому что я думаю, что RunningSoldier будет иметь разные свойства/методы, чем другие солдаты. Если у вас будет перечисление для состояния, то в каждом из ваших методов вы будете иметь условие if/else/switch. Таким образом, ваши методы будут большими и сложными для поддержания. Поэтому лучше иметь разные классы с базовым классом Солдата (концепции ООП).
Обновить:
Если вам нужно добавить другой тип для солдата, то добавление класса будет проще, чем перечисление. Что касается перечисления, вы должны пройти все методы (перемещение, прыжок, огонь и т.д.). Но для класса легко добавить новый класс и реализовать эти методы. Легко и приятно.
Возможно, что в некоторых других случаях перечисления будут лучше, чем отдельные классы. Например, перечисление для CurrencyType или Units. У меня есть метод в моем коде, который принимает два перечисления и преобразует значение из одного
public static double ConvertUnits(this double original, SimplifiedUnits sourceUnits, SimplifiedUnits targetUnits)
{
if (sourceUnits == targetUnits || sourceUnits == SimplifiedUnits.Unknown)
return original;
if (sourceUnits == SimplifiedUnits.Feet && targetUnits == SimplifiedUnits.Meters)
return original * GeometryConstants.MetersPerFoot;
if (sourceUnits == SimplifiedUnits.Meters && targetUnits == SimplifiedUnits.Feet)
return original / GeometryConstants.MetersPerFoot;
throw new NotSupportedException();
}