Тема: Рефакторинг констант
Рефакторинг констант
Дано
1. Таблиця product_statuses (id, ident, caption)
2. В налаштуваннях витягаємо з бази всі статуси і генеруємо константи PRODUCT_STATUSES_{ident} => {id}
3. В коді/шаблонах використовуємо ці константи.
Таких таблиць є вже > 10
Чому вважаю це проблемою:
1. Мені не подобається що генерується така велика кількість констант
2. Конфіг засмічений цим генерування
3. Те що більшість контант вузькоспеціалізовані і потрібні не при кожному запиті, а тільки при роботі з конкретним модулем системи
4. Схема перетворюється у монстра, якщо з'являється можливість деактивувати статус. Бо тоді для деактивованого статусу константу не генеруємо, а отже всюди в коді де писали PRODUCT_STATUSES_{ident}, треба додатково дописувати перевірку defined
Бачу два варіанти
1.
Зробити типу моделями. В коді використовувати не константи, а виклик метода моделі.
Замість: PRODUCT_STATUSES_{ident}
Писати $this->productStatuses->get({ident})
В get lazy load, який разово витягатиме всі статуси
2. Клас реєстр, в який можна запушувати описи цих словників. І в коді працювати через один екземпляр класу реєстру.
В налаштуваннях
$registry->add("productStatuses", "SELECT id, ident FROM ...", "ident", "id")
В коді писати $registry->get("productStatuses", {ident})
Який варіант краще вибрати чи може є ще якісь варіанти вирішення даної проблеми?