Как эффективно обрабатывать большие перечисления с несколькими контекстами

Как эффективно обрабатывать большие перечисления с несколькими контекстами
Как эффективно обрабатывать большие перечисления с несколькими контекстами - tomsdg @ Unsplash

Как эффективно обрабатывать большие перечисления с несколькими контекстами?

Работа с большими перечислениями, содержащими несколько контекстов, может быть вызовом для разработчиков. Одним из распространенных решений является привязка кода к перечислению, но такой подход может сделать код хрупким и неудобным для поддержки в будущем. В этой статье мы рассмотрим альтернативные способы решения этой проблемы.

Первый подход - присоединение сообщений непосредственно к каждому значению перечисления. Это означает, что каждое значение будет иметь свое собственное сообщение, которое будет добавляться при необходимости. Например:

public enum TicketStatus {
    OPEN("Тикет открыт"),
    CLOSED("Тикет закрыт"),
    PENDING("Тикет на рассмотрении");

    private final String message;

    private TicketStatus(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

Такой подход позволяет легко получить сообщение, связанное с конкретным значением перечисления. Однако, если есть много контекстов или значение может использоваться в разных ситуациях, эта абстракция может стать непрактичной. В таких случаях можно использовать правильную структуру данных для хранения сообщений.

Второй подход - группировка значений перечисления в объект Ticket_Case, который содержит все связанные с ними сообщения. Такая структура данных может выглядеть примерно так:

public class Ticket_Case {
    public static final Ticket_Case OPEN = new Ticket_Case("OPEN", "Тикет открыт", "Тикет на рассмотрении");
    public static final Ticket_Case CLOSED = new Ticket_Case("CLOSED", "Тикет закрыт");
    public static final Ticket_Case PENDING = new Ticket_Case("PENDING", "Тикет на рассмотрении");

    private final String code;
    private final List<String> messages;

    private Ticket_Case(String code, String... messages) {
        this.code = code;
        this.messages = Arrays.asList(messages);
    }

    public String getCode() {
        return code;
    }

    public List<String> getMessages() {
        return messages;
    }
}

Теперь можно легко получить все сообщения, связанные с конкретным значением, или даже сгруппировать их по контексту.

Использование такой структуры данных делает код более гибким и удобным для поддержки. Кроме того, не нужно изменять само перечисление при добавлении новых контекстов или сообщений.

Итак, при работе с большими перечислениями с несколькими контекстами, следует аккуратно подходить к выбору подходящей абстракции. Присоединение сообщений непосредственно к каждому значению или группировка их в объекты может помочь сделать код более удобным и гибким.


LetsCodeIt, 13 августа 2023 г., 15:59

Похожие посты

Распределение ответственности между POCO, писателем и конвертером в программированииРеализация инкапсуляции в приложении, которому необходимо отправлять электронные письмаРоль DTO и эффективное использование в приложениях Spring для управления логикой в EntityPython: наследование в программировании - мощный концепт для создания иерархии классовСоздание реализации шаблона конечного автомата State GoF для машины состояний документов на PHP 7.4Преимущества и недостатки синхронного общения и кеширования в микросервисахМикросервисы: концепция, функционирование и примеры. Роль сервиса CheckoutКритика и руководство по архитектуре backend с Express.js и MVC-паттерном. Использование Vue.js для frontendДоверие серверам в сети: проблемы и решения в области безопасностиРоль DTO и эффективное использование в приложениях Spring для управления логикой в Entity