Я работаю над рефакторингом кода части загрузки конфигурационного файла в PHP. Ранее я использовал несколько 'ini' файлов, но теперь я планирую пойти для единственного XML-файла, который будет содержать все детали конфигурации проекта. Проблема, если кто-то хочет конфигурационный файл в ini или DB, или что-либо еще а не по умолчанию (в этом случае XML), мой код должен обработать ту часть.
Если кто-то хочет пойти для другого параметра конфигурации как ini, он должен будет создать ini файл, подобный моему конфигурационному XML-файлу, и мой менеджер конфигурации должен заботиться все как парсинг, хранящий в кэше. Для этого мне нужен механизм, позволяет, говорят, что надлежащий интерфейс для моих данных конфигурации, где базовое хранилище данных может быть чем-либо (XML, DB, ini и т.д.) также, я не хочу, чтобы это зависело от них лежащих в основе хранилища и в любое время в будущем, это должно быть расширяемо к другим форматам файлов.
Предполагая, что вы хотите использовать класс для обработки всего этого, у вас есть 3 варианта:
ReadConfigurationBase
, затем 3 класса реализации, ReadConfigurationXML
, ReadConfigurationINI
и ReadConfigurationDatabase
, и вам нужно будет выбрать правильный config.xml
, он будет знать, что должен вернуть ReadConfigurationBase
, реализованный с использованием ReadConfigurationXML
ReadConfiguration
, который действует как шаг 2, но создает, содержит и владеет тремя другими классами.Три небазовых класса просто знают, как читать этот тип файла конфигурации, и передавать информацию обратно в общем виде. думайте в духе интерфейса: вы знаете, что можете получать данные, но вам все равно, как.
Я бы предложил вариант 3, так как он облегчит жизнь. Вам придется вносить небольшие изменения каждый раз, когда вы захотите добавить метод хранения, но это просто добавит немного в класс ReadConfiguration
.
Есть способ сделать его на 100% динамичным, но это усложнит ситуацию, и я не думаю, что он вам действительно нужен для этого.
Взгляните на Zend_Config . Он предоставляет адаптеры для массивов, Xml и Inis. Как и все компоненты Zend Framework, его можно использовать изолированно от оставшейся платформы. Даже если вы не хотите его использовать, он хорошо спроектирован, и вы можете почерпнуть из него несколько идей для своего собственного менеджера конфигурации.