Рубрики
Без рубрики

Как не создавать перечисление (Java)

На протяжении многих лет я видел и создавал множество перечислений на Java. Некоторые из них были очень полезны, некоторые – нет… Помеченный java.

На протяжении многих лет я видел и создавал множество перечислений на 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”