На своем проекте заметил странное явление, в коде встречалось несколько перечислений примерно такого вида:
enum MyEnum
{
Value1,
NotValue1
}
Я думаю идея понятна. Есть два взаимоисключающих значения. Для этих значений заводится перечисление. Возникает закономерный вопрос: "Зачем?". Кроме лишнего кода этот шедевр больше ничего не привносит в проект. Каждый раз, когда нужно проверить какое-то условие, приходится код примерно такого вида:
if (myValue == MyEnum.Value1)
И так постоянно. Налицо дублирование кода, хоть и в мелких маштабах. От того, что это дублирование мелкое, легче не становится.
Мое мнение, что данное перечисление лучше (и логичнее) было бы заменить на булевое значение. Например сделать что-то наподибие такого:
bool IsValue1
Теперь мы имеем все то же, что было и раньше и при этом избавлены от дублирующегося кода.
Кто будет пойман с поличным (при написании очередного такого перечисления) или случайно (проблем посмотреть, кто этот файл создал в системе контроля версий нет) будет выставлен на публичное осмеяние =))
Зачем нужен enum из двух объектов, если есть булевский тип?
Подписаться на:
Комментарии к сообщению (Atom)
Обо мне
Теги
- .NET (1)
- Лицензии (1)
- Anti-Patterns (16)
- ASP.NET (3)
- Bug fixes (1)
- C# (5)
- Code Review (4)
- Fun (1)
- Naming (1)
- Refactoring (20)
- Team rules (2)
- Web (2)
Архив
-
▼
2009
(22)
-
▼
мая
(18)
- Зачем нужен enum из двух объектов, если есть булев...
- Привязка к производителю
- Грибное управление
- Моральный риск
- Прячьте приведение типов внутрь метода!
- Бог-громовержец
- Эскалация обязательств
- Коллективное проектирование
- Дойная корова
- Паралич от анализа
- Методологические aнти-паттерны
- Анти-паттерны программирования
- Объектно-ориентированные анти-паттерны
- Анти-паттерны проектирования программного обеспечения
- Анти-паттерны анализа
- Анти-паттерны управления
- Организационные анти-паттерны
- Введение в анти-паттерны
-
▼
мая
(18)
2 коммент.:
bool хорош когда предполагается "или-или": так, ответ может быть либо правильный либо неправильный
class Answer
{
bool Correct {get; set;}
}
но гораздо чаще проблема шире, чем простое "или-или" - хотя значений все так же может быть два: например, блоггер может жить или в Минске, или в Праге (пускай других вариантов пока нет)
class Blogger
{
City City {get; set;}
}
enum City
{
Prague,
Minsk,
}
тут можно было бы использовать bool - но enum логичнее, т.к. "Minsk" это не "!Prague" с точки зрения дизайна.
--
Андрей
codevanced.net
Видимо, действительно стоило написать подробнее. В описанном мной случае возможно было только два значениея у перечисления. Три и больше там просто не имело смысла. По этой причине такая буря негодования....
Отправить комментарий