Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top