Менеджер конфигурации для PHP
Вопрос
Я работаю над рефакторингом кода части загрузки файла конфигурации в 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, его можно использовать изолированно от остальной платформы.Даже если вы не хотите его использовать, он хорошо спроектирован, и вы можете почерпнуть из него несколько идей для своего собственного менеджера конфигурации.