1

Тема: Рефакторинг констант

Рефакторинг констант

Дано
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})

Який варіант краще вибрати чи може є ще якісь варіанти вирішення даної проблеми?

2

Re: Рефакторинг констант

Думав цікавий кейс(

Не можу зрозуміти, чи це фахових людей у рубриці нема, чи сама задача є чимось мега-очевидним і нікому не цікава?

3

Re: Рефакторинг констант

З константами тут явно перемудрили. Загалом такі штуки - невеликі значення, які треба постійно опитувати - як на мене, краще зберігати у чомусь на кшталт memcached чи redis.