使用类层次结构来配置配置设置的不同部分可能会出现什么问题?

时间:2015-02-07 18:17:34

标签: configuration class-hierarchy

以下是我的问题的背景。通常将配置值组织到不同的文件中。就我而言,我的标准是从一台服务器到另一台服务器的简单编辑和可移植性。该软件包用于Internet支付,其设计使得软件包的单个安装可用于不同的应用程序。此外,我们希望应用程序可以在不同的服务器上具有不同的阶段(开发,测试,登台和生产)。我为以下三个类别中的每一个使用不同的文件:仅依赖于应用程序的配置值,仅依赖于服务器的配置值以及依赖于两者的配置值。通过这种方式,我可以轻松地将仅依赖于应用程序的配置值从一个服务器移动到另一个服务器,例如从开发到生产。它们经常被编辑。所以,这是值得的。同样,我可以在单个文件中编辑特定于服务器的值,而无需为不同的应用程序维护冗余副本。术语“配置值”包括在不同的应用程序或服务器中甚至功能必须以不同方式定义的任何内容。如果函数的定义取决于应用程序或服务器,那么它就是配置过程的一部分。术语“配置值”对我来说很自然,即使它包含功能。

现在,问题就在这里。我希望函数是PHPUnit可测试的。我使用PHP,但也许这个问题在其他语言中也有意义。我决定将配置值存储为类中的属性和方法,并使用类层次结构来组织不同的类别。基类是PaymentConfigServer(仅依赖于服务器)。依赖于应用程序的值位于PaymentConfigApp extends PaymentConfigServer中,依赖于这两者的值位于PaymentConfig extends PaymentConfigApp中。类PaymentConfigApp包含依赖于应用程序或服务器的配置值,但文件本身包含仅依赖于应用程序的值。同样,PaymentConfig包含所有conf值,但文件本身包含仅依赖于两者的值。这种类层次结构的使用会导致问题吗?我不是在寻找有关最佳方法的讨论。我只是想知道,如果遇到类似的情况,我应该记住哪些问题,可能出现什么样的冲突等等?

1 个答案:

答案 0 :(得分:0)

通常,子类用于添加修改功能,而不是删除功能。因此,您建议的单继承方法会遇到一个概念性问题,如果/当您遇到总线时,可能会导致必须维护应用程序的任何人产生混淆:基类提供对特定于服务器的配置的支持,但是你(假装)删除 PaymentConfigApp子类中的功能,并(假装)在其PaymentConfig子类中重新添加功能。

我不熟悉PHP语言,但如果它支持多重继承,那么我认为拥有两个基类更合乎逻辑:PaymentConfigServerPaymentConfigApp,然后PaymentConfig 1}}从这两个基类继承。

另一种方法可能是只有一个类,其中构造函数采用一个枚举参数(或一对布尔参数),用于指定该类是否应该只处理特定于服务器的配置,只是应用程序特定的配置或两种配置类型。

顺便说一句,您建议维护配置数据的方法不是我使用的方法。如果您有兴趣阅读替代方法,那么您可以阅读answer I gave to another question on StackOverflow