На протяжении многих лет я видел и создавал множество перечислений на Java. Некоторые из них были очень полезны, некоторые просто избегали немного жесткого кода и нескольких плохих.
Это пример очень плохого дизайна перечисления. Я никого больше не виню, я был одним из участников этого. Но в свою защиту скажу, что тогда я был новичком. Давайте взглянем на это:
public enum EventStatusType {
/**
* event is processed {0 value in database}
*/
PROCESSED,
/**
* event is not processed {1 value in database}
*/
UNPROCESSED,
/**
* event is now running {2 value in database}
*/
IN_PROGRESS,
/**
* event has failed {3 value in database}
*/
FAILED
}
Во-первых, что это за название? Это либо Статус , либо Введите , который в данном случае является статусом, так что Статус события было бы лучшим названием.
Затем мы переходим к JavaDocs. Они ничего не объясняют. Вместо того, чтобы объяснять, например, что это значит, что событие продолжается они просто повторяют значения. Кроме того, упоминание о том, что они представляют в базе данных, абсолютно бесполезно, избыточно и даже неверно. Бесполезно и излишне, потому что каждый, кто работает с перечислениями и сохраняет их по порядку в базе данных, должен знать, как они работают. Неверно, потому что, если мы изменим тип, используемый в нашей сущности, на String , мы не должны быть вынуждены изменять JavaDoc для перечисления.
Другая крайне раздражающая вещь в этом перечислении – это его порядок. При просмотре базы данных для проверки статуса событий вы сталкиваетесь с некоторыми записями со статусами 0 , 1 , 2 , и 3 . Ваша интуиция говорит, что 0 является базовым значением, тогда статус события перейдет к 1 и 2 (или 3 ). И вы ошибаетесь. Базовое значение равно 1 , затем вы переходите к 2 и окончательный статус – это либо 0 или 3 . Очень нелогично.
Устранение упомянутых проблем с помощью этого кода улучшит читабельность и простоту обслуживания.
У вас есть еще какие-нибудь предложения? Пожалуйста, поделитесь этим со мной.
Оригинал: “https://dev.to/amaralani/how-not-to-design-an-enum-java-3mkn”