Дизайн программного обеспечения - где хранить заранее определенные значения, которые влияют на логику / поведение приложения - PullRequest
0 голосов
/ 03 ноября 2018

Каков наилучший шаблон / дизайн для хранения предварительно определенных значений, которые влияют на поведение приложения?

Например, скажем, у меня есть система интернет-магазина, где каждая покупка осуществляется путем вызова определенного 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, а также их сложнее поддерживать, поскольку данные должны быть изменены как в коде, так и в базе данных. Мне не нравится эта связь между базой данных и кодом, которая должна поддерживаться вручную. Поскольку значения влияют на различную логику в коде, имеет смысл хранить значения только в коде, но затем код становится хранилищем данных.

Каков будет лучший дизайн / шаблон для таких ситуаций?

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