Диспетчер конфигурации для PHP - PullRequest
6 голосов
/ 18 марта 2010

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

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

Ответы [ 2 ]

5 голосов
/ 18 марта 2010

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

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

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

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

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

3 голосов
/ 18 марта 2010

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

...