У меня есть этот Config - класс, который я использую в своем приложении PHP5 для загрузки и анализа моей статической конфигурации. До сих пор мне удалось не допустить, чтобы класс был синглтоном / реестром, и вместо этого передал экземпляр класса Config туда, где это было необходимо, с помощью внедрения зависимостей.

Но теперь, когда мне нужно установить / внести изменения в свой Config во время выполнения в одном месте, мои изменения не отражаются глобально и находятся далеко от специалиста с использованием модификатора static в PHP, Мне нужно спросить:

Как лучше всего гарантировать, что изменения свойств в моем Config - классе отражаются во всем моем приложении, не превращая класс в синглтон? Могу я просто сделать переменную, содержащую данные конфигурации static?

2
Industrial 25 Авг 2011 в 20:03

2 ответа

Лучший ответ

До сих пор мне удалось не допустить, чтобы класс был синглтоном / реестром, и вместо этого передал экземпляр класса Config туда, где это было необходимо, с помощью внедрения зависимостей.

Если вы передадите один и тот же экземпляр вашего класса Config во все части вашего приложения и измените параметр, он должен отразиться везде.

Если вы создаете несколько объектов класса (и каждый раз анализируете этот файл конфигурации ?!), возможно, вы захотите прекратить это делать. Возможно, это расточительно, и я бы сказал, что это сбивает с толку.

Итак, если вы create only one и передадите это, все должно будь умницей.


В предположении, что вы создаете несколько экземпляров объекта, которые должны существовать только один раз:

Если вы можете «исправить» свою архитектуру, чтобы это было возможно: сделайте это.

Если вы не можете этого сделать ... ну ... создание статического свойства для хранения ваших значений в классе, которое вы можете отключить несколько экземпляров , по крайней мере, в моя книга - это главный фактор WTF . Если вы не можете исправить это (то есть это слишком хлопотно), просто «сломайте» его ожидаемым образом, чтобы другие люди не споткнулись об этом.

Я бы предпочел синглтон, чем что-то, что создает все проблемы с синглтонами, а также лжет о том, что он является оболочкой для глобальной переменной.

2
edorian 25 Авг 2011 в 16:15

Слепой отказ от шаблонов проектирования из-за того, что вы слышите на Интернет-форумах, что они плохие, - это такой же анти-шаблон, как и одиночные шаблоны в целом. Если инструмент подходит для работы, значит, он правильный.

Посмотрите на свой вопрос, вы пытаетесь эмулировать синглтоны через сложную систему множественного обновления , ради всего святого ... И, чтобы вы знали, создание статического класса по сути превращает его в синглтон, хотя и небезопасный, который можно перезаписать в любой момент.

TL; DR: думайте сами и используйте правильные инструменты; сделайте свой класс конфигурации одноэлементным.

1
Blindy 25 Авг 2011 в 16:08