6

我正在对 PHP 中的配置文件加载部分进行代码重构。早些时候我使用了多个“ini”文件,但现在我计划使用单个 XML 文件,该文件将包含项目的所有配置细节。问题是,如果有人想要 ini 或 DB 或其他任何配置文件而不是默认配置文件(在本例中为 XML),我的代码应该处理该部分。

如果有人想使用像 ini 这样的其他配置选项,他将不得不创建类似于我的 XML 配置文件的 ini 文件,而我的配置管理器应该负责解析、存储在缓存中等所有事情。为此,我需要一种机制,让我为我的配置数据说适当的接口,其中底层数据存储可以是任何东西(XML、DB、ini 等),我也不希望它依赖于这些底层存储,并且在将来的任何时候都应该这样做可扩展为其他文件格式。

4

2 回答 2

5

假设您想使用一个类来处理所有这些,您有 3 个选项:

  1. 有一个名为类似的基类,ReadConfigurationBase然后是 3 个实现类,ReadConfigurationXML, ReadConfigurationINIReadConfigurationDatabase并且您必须选择正确的
  2. 与上面相同,但使用工厂来选择,基于传入的东西。就像如果你通过config.xml它会知道返回ReadConfigurationBase使用ReadConfigurationXML
  3. 有一个名为的类ReadConfiguration,它充当第 2 步,但创建、包含和拥有其他 3 个类。

3 个非基类只知道如何读取该类型的配置文件,并以通用方式将信息传回。沿着界面的思路思考:您知道您可以获取数据,但您并不关心如何获取数据。

我建议选择 3,因为它会让生活变得更轻松。每次要添加存储方法时都必须进行一些修改,但这只是在ReadConfiguration类中添加一点。

有一种方法可以让它 100% 动态化,但这会使事情复杂化,我认为你并不真的需要它。

于 2010-03-18T17:20:23.413 回答
3

看看Zend_Config。它为数组、Xml 和 Inis 提供了适配器。像 Zend Framework 中的所有组件一样,它可以与其余的 Framework 隔离使用。即使您不想使用它,它的设计也很好,您可能会从中获得一些关于您自己的配置管理器的想法。

于 2010-03-18T17:14:15.590 回答