设置“深层”配置选项的最佳方法是什么?

时间:2011-12-06 23:28:38

标签: c++ perl matlab configuration

假设有一个函数需要配置设置作为输入,但是这个函数被称为顶层'main'函数的几个层次。

在最佳编程实践方面,将此设置传递给函数的最佳方法是什么?

一种方法是只使用一个全局变量并在顶层函数中设置它并在目标函数中读取它,但我认为这被认为是错误的编程实践。

另一种方法是将设置作为参数从顶部传递到几个中间函数,一直到最终目标函数。这似乎非常乏味,也许容易出错。

还有其他方法吗?

您可以使用您选择的语言作为答案,但仅供参考,我使用的是C / C ++,Perl和Matlab。

4 个答案:

答案 0 :(得分:3)

我喜欢singleton objects进行配置。它是一个只应拥有一个实例的共享资源。当您尝试创建新对象时,您将获得现有对象。您不必担心全局变量或子例程或方法参数。只需获取一个新的配置对象,并在需要时使用它。

C ++中的Gang of Four就是一个例子。

答案 1 :(得分:2)

将深度调用堆栈留在过程编程风格中,答案变得平庸。

重新构建您的程序以利用现代面向对象。 Perl roles make for flat hierarchies.配置只是一个属性。

答案 2 :(得分:1)

我使用的系统使用Publish-Subscribe(观察者模式)实现将设置/配置更改传播到需要了解它们的对象。

需要通知设置更改的对象(original Gang of Four description中的订阅者或观察者):

  1. 继承自订阅者。
  2. 通过Publisher的Attach方法将自身(订阅)附加到发布者。
  3. 发生设置/配置更改时,发布者会通知。
  4. 我们根据需要使用variant that allows Subscribers to poll Publishers来设置/配置数据。

    使用Publish-Subscribe模式可以最大限度地减少管理设置的对象与需要它们的对象之间的耦合。

答案 3 :(得分:0)

在matlab中,我总是有一个脚本allParam.m,我设置了所有参数。

如果函数需要其中一个参数,我只需调用脚本,然后设置它。