До задавания вопроса на здесь я никогда не полагал (перечисления) быть "плохой вещью". Для тех там, которые полагают, что они не лучшая практика, каков некоторый approachs/patterns для предотвращения их использования в коде?
Править:
public Enum SomeStatus
Approved = 1
Denied = 2
Pending =3
end Enum
Проблема с перечислениями описана в Refactoring Фаулера, где это считается запахом кода . Это не имеет ничего общего с безопасностью типов, а скорее заставляет вас разбрасывать операторы switch
по всему вашему коду, нарушая тем самым принцип DRY .
Шаблон состояния является лучшей моделью той же структуры, поскольку он позволяет реализовать и изменять логику, относящуюся к одному и тому же состоянию в одном классе. Это также увеличивает сплоченность и уменьшает классовую связь.
Нет возможности «вводить» один exe в другой. Это действие даже не определено, так как у вас нет управления внутренними элементами выполнения, которые вы делаете при вставке объектов друг в друга.
Наиболее близким вариантом для exe-файлов является piping, где вы можете перенаправить вывод одного exe-файла на вход другого:
one.exe | two.exe
-121--2471826- Мне нравятся перечисления для размещения простых в использовании и понятных имен на связанных наборах значений. Мне просто не нравится реализация c #. Используя ваш образец перечисления:
SomeStatus status = 17;
Это компилирует и работает без претензий, хотя 17 - это выход за границы.
Дельфы имеют лучшие перечисления (или, по крайней мере, раньше - это были годы с тех пор, как я его использовал)
-121--2880600-Основным пунктом при перечислении является то, что определено только в одном месте (нормализация в терминах базы данных). Если это перечисление является законной частью записываемого класса, продолжайте.
В противном случае, особенно если вы обнаруживаете, что объявляете об этом несколько раз, переосмыслите, для чего нужно перечисление. Он на самом деле несет данные? Хватит ли значений для сохранения возможностей в базе данных?
Мне нравятся перечисления за то, что они дают простые для использования и понимания имена связанным наборам значений. Мне просто не нравится реализация в c#. Используя ваш пример перечисления:
SomeStatus status = 17;
Это компилируется и работает без жалоб, хотя 17 выходит за рамки.
В Delphi перечисления лучше (или, по крайней мере, были раньше - я уже много лет не использовал их)
Я считаю, что использование перечисления - это хорошо. Это обеспечивает строгую безопасность типов.
Иногда у них есть некоторые недостатки, но на самом деле это обычно связано с ситуациями, когда все возможные варианты неизвестны заранее. Если у вас есть фиксированный набор параметров, например, в вашем примере, то строгие типизированные перечисления - это хорошо, и их не следует избегать.