Каков наилучший шаблон / дизайн для хранения предварительно определенных значений, которые влияют на поведение приложения?
Например, скажем, у меня есть система интернет-магазина, где каждая покупка осуществляется путем вызова определенного API. Существуют разные провайдеры , каждый со своими собственными API, опциями и требованиями, и каждому товару в магазине назначен провайдер.
Поставщики могут храниться по-разному:
- В отдельной таблице в базе данных и упоминается в таблице products через внешний ключ
- В той же таблице products с MySQL ENUM или
varchar
, а затем определяется как константы в самом коде
Хранение данных в базе данных представляется наиболее чистым решением, однако, поскольку оно влияет на код, это означает, что значения будут жестко закодированы в коде. Например:
if($product->provider === "MyProviderOne") { ... }
if($product->provider === "MyProviderTwo") { ... }
// or
if($product->provider->id === 1) { ... }
if($product->provider->id === 2) { ... }
Что похоже на плохой дизайн. Его также можно определить как константы и использовать как
if($product->provider === Providers::MyProviderOne) { ... }
if($product->provider === Providers::MyProviderTwo) { ... }
Но есть много аргументов против использования типов ENUM в MySQL, а также их сложнее поддерживать, поскольку данные должны быть изменены как в коде, так и в базе данных. Мне не нравится эта связь между базой данных и кодом, которая должна поддерживаться вручную. Поскольку значения влияют на различную логику в коде, имеет смысл хранить значения только в коде, но затем код становится хранилищем данных.
Каков будет лучший дизайн / шаблон для таких ситуаций?