3

假设我有 ini/json 来存储我的桌面应用程序的配置设置,是否可以在启动时/在需要时加载所有属性的静态对象,或者是否有其他更好的选择?

由于这是我第一次这样做,所以只是想知道静态对象是好的还是单例模式或其他东西会更好

4

4 回答 4

3

我通常使用Boost.Program_options,我通常使用单例。

于 2009-05-04T07:24:17.570 回答
2

无论哪种方式都很好。

如果是我,我会在构建配置对象时使用它。

cConfig Config("config.ini");

此 Config 类将加载在文件中找到的设置。任何代码都可以通过执行访问设置

Config.Get("NumberOfFoobars")

出于可测试性目的,如果构造中没有文件,则将类的设置设置为默认值,或者创建一个日志文件,其中包含一条建议用户缺少设置的行。

然后对于需要配置的函数,我会将 Config 实例作为参数的一部分传递:

DoStuff(Config, [...]);

并让 DoStuff 从 Config 类中获取变量。

这使得该类可测试(您可以模拟 Config 类)、可读(一目了然,您可以知道哪个函数需要配置)并且您不必依赖静态实例(如果您不知道如何使用单例,则很危险)使用它们)。

您可能有兴趣了解有关此的更多信息

于 2009-03-12T05:34:41.613 回答
0

如果用户要修改配置设置以确定应用程序的运行方式,那么最好将其保存在某个 ini 文件中。一些用户喜欢直接编辑 ini 文件,而不是通过 GUI 进行。最好同时给出这两个选项。
此外,一些用户有多个 ini 文件,并在它们之间轮换以获取他们当时需要的设置。

于 2009-03-12T05:47:43.050 回答
0

在启动时(或第一次需要设置)加载所有设置将在大多数情况下工作,但用户必须重新启动应用程序才能使对配置文件的任何编辑生效。对于大多数用户来说,这永远不会成为问题,但对于喜欢直接编辑配置文件的高级用户来说,这可能会令人沮丧。在基于 UNIX 的操作系统上,可以处理 SIGHUP 信号,该信号已成为重新读取配置文件的可接受触发器。我知道 Windows 没有类似的方法。另一种方法是跟踪配置文件的修改时间,以确定是否应重新读取设置。

于 2009-03-12T06:02:46.507 回答