Если мы хотим написать S.O.L.I.D. Каков наилучший способ обусловить поведение внутри слабо связанного и тестируемого модуля каким-либо глобальным значением конфигурации?
Лучше ли вводить какой-то объект, содержащий информацию, или просто ссылаться на глобальную статическую / синглтон?
Я работаю с PHP, но я думаю, что этот вопрос не зависит от языка.
Заранее спасибо.
Если у вас есть два различных поведения в зависимости от глобального состояния / конфигурации, то я, вероятно, реорганизовал бы стратегию (шаблон стратегии), а затем внедрил бы стратегию.
Тогда основной задачей будет ввести правильную стратегию в зависимости от конфигурации.
Если стратегия зависит от изменяющейся конфигурации, то есть конфигурации, которая изменяется во время выполнения, тогда стратегия должна быть обернута в поставщика / поставщика. (вероятно, не относится к PHP)
Альтернативой может быть наличие общего типа переключателя объектов, который вводится. Переключатель может быть настроен с основного на возврат true или false.
С объектом-переключателем вы можете иметь более сложную логику, чем с простым логическим значением, но это зависит от варианта использования.
Но мне не нравится альтернатива, потому что было бы проще, если бы класс не знал о двух разных видах поведения.
Других решений пока нет …