Pergunta

Estou trabalhando na re-formação do código da peça de carregamento de arquivo de configuração no PHP. Anteriormente, eu estava usando vários arquivos 'ini', mas agora pretendo optar por um único arquivo XML, que contém todos os detalhes da configuração do projeto. O problema é que, se alguém quiser um arquivo de configuração no INI ou DB ou qualquer outra coisa e não o padrão (neste caso XML), meu código deve lidar com essa parte.

Se alguém quiser optar por outra opção de configuração, como a INI, ele terá que criar um arquivo INI semelhante ao meu arquivo de configuração XML e meu gerenciador de configuração deve cuidar de tudo como análise, armazenamento em cache. Para isso, preciso de um mecanismo, digamos a interface adequada para meus dados de configuração, onde o armazenamento de dados subjacente pode ser qualquer coisa (xml, db, ini etc.) também não quero que depende dessas lojas subjacentes e a qualquer momento no futuro, isso deve ser extensível para outros formatos de arquivo.

Foi útil?

Solução

Supondo que você queira usar uma classe para lidar com tudo isso, você tem 3 opções:

  1. Tem uma classe base chamada algo como, ReadConfigurationBase então 3 classes de implementação, ReadConfigurationXML, ReadConfigurationINI, e ReadConfigurationDatabase E você teria que escolher o certo
  2. O mesmo que acima, mas usando uma fábrica para escolher, com base em algo passado. Como se você passar config.xml saberia voltar ReadConfigurationBase implementado usando ReadConfigurationXML
  3. Tenha uma aula chamada ReadConfiguration e atua como a etapa 2, mas cria, contém e possui as 3 outras classes.

As três classes que não são da base saberiam simplesmente como ler esse tipo de arquivo de configuração e passar as informações de uma maneira genérica. Pense na linha de uma interface: você sabe que pode obter os dados, mas não se importa como.

Eu sugeriria a opção 3, pois tornaria a vida mais fácil. Você teria que fazer um pouco de modificação toda vez que quiser adicionar um método de armazenamento, mas isso estaria adicionando um pouco ao ReadConfiguration classe.

Existe uma maneira de torná -lo 100% dinâmico, mas isso complicaria os assuntos, e eu não acho que você realmente precisa disso.

Outras dicas

Dê uma olhada em Zend_config. Ele fornece adaptadores para matrizes, XML e INIS. Como todos os componentes na estrutura do Zend, ele pode ser usado isolado da estrutura restante. Mesmo se você não quiser usá -lo, ele é bem projetado e você pode obter algumas idéias para o seu próprio gerente de configuração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top