Менеджер конфигурации для PHP

Я работаю над рефакторингом кода части загрузки файла конфигурации в PHP. Раньше я использовал несколько файлов «ini», но теперь я планирую использовать один файл XML, который будет содержать все детали конфигурации проекта. Проблема в том, что если кому-то нужен файл конфигурации в ini или DB или что-то еще, а не файл по умолчанию (в данном случае XML), мой код должен обрабатывать эту часть.

Если кто-то хочет использовать другой вариант конфигурации, такой как ini, ему придется создать ini-файл, аналогичный моему XML-файлу конфигурации, и мой менеджер конфигурации должен позаботиться обо всем, например, об анализе, сохранении в кеше. Для этого мне нужен механизм, скажем, правильный интерфейс для моих данных конфигурации, где базовое хранилище данных может быть чем угодно (XML, DB, ini и т. д.), а также я не хочу, чтобы оно зависело от этого базового хранилища, и в любое время в будущем это должно быть расширяемым для других форматов файлов.


person Jack    schedule 18.03.2010    source источник


Ответы (2)


Предполагая, что вы хотите использовать класс для обработки всего этого, у вас есть 3 варианта:

  1. Пусть базовый класс называется примерно так: ReadConfigurationBase, затем 3 класса реализации, ReadConfigurationXML, ReadConfigurationINI и ReadConfigurationDatabase, и вам нужно будет выбрать правильный.
  2. То же, что и выше, но с использованием фабрики для выбора на основе чего-то переданного. Например, если вы передадите config.xml, он будет знать, что нужно вернуть ReadConfigurationBase, реализованный с использованием ReadConfigurationXML
  3. У вас есть класс с именем ReadConfiguration, и он действует как шаг 2, но создает, содержит и владеет тремя другими классами.

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

Я бы предложил вариант 3, так как это облегчило бы жизнь. Вам придется вносить небольшие изменения каждый раз, когда вы хотите добавить метод хранения, но это будет просто небольшое добавление в класс ReadConfiguration.

Есть способ сделать его на 100% динамичным, но это усложнит дело, и я не думаю, что вам это действительно нужно для этого.

person Tarka    schedule 18.03.2010
comment
Спасибо за ответ. Не могли бы вы подробнее рассказать о третьем варианте? - person Jack; 18.03.2010

Взгляните на Zend_Config. Он предоставляет адаптеры для массивов, Xml и Inis. Как и все компоненты Zend Framework, его можно использовать изолированно от остальной части Framework. Даже если вы не хотите его использовать, он хорошо разработан, и вы можете почерпнуть из него несколько идей для своего собственного менеджера конфигурации.

person Gordon    schedule 18.03.2010