假设我有 ini/json 来存储我的桌面应用程序的配置设置,是否可以在启动时/在需要时加载所有属性的静态对象,或者是否有其他更好的选择?
由于这是我第一次这样做,所以只是想知道静态对象是好的还是单例模式或其他东西会更好
假设我有 ini/json 来存储我的桌面应用程序的配置设置,是否可以在启动时/在需要时加载所有属性的静态对象,或者是否有其他更好的选择?
由于这是我第一次这样做,所以只是想知道静态对象是好的还是单例模式或其他东西会更好
我通常使用Boost.Program_options,我通常使用单例。
无论哪种方式都很好。
如果是我,我会在构建配置对象时使用它。
cConfig Config("config.ini");
此 Config 类将加载在文件中找到的设置。任何代码都可以通过执行访问设置
Config.Get("NumberOfFoobars")
出于可测试性目的,如果构造中没有文件,则将类的设置设置为默认值,或者创建一个日志文件,其中包含一条建议用户缺少设置的行。
然后对于需要配置的函数,我会将 Config 实例作为参数的一部分传递:
DoStuff(Config, [...]);
并让 DoStuff 从 Config 类中获取变量。
这使得该类可测试(您可以模拟 Config 类)、可读(一目了然,您可以知道哪个函数需要配置)并且您不必依赖静态实例(如果您不知道如何使用单例,则很危险)使用它们)。
您可能有兴趣了解有关此的更多信息
如果用户要修改配置设置以确定应用程序的运行方式,那么最好将其保存在某个 ini 文件中。一些用户喜欢直接编辑 ini 文件,而不是通过 GUI 进行。最好同时给出这两个选项。
此外,一些用户有多个 ini 文件,并在它们之间轮换以获取他们当时需要的设置。
在启动时(或第一次需要设置)加载所有设置将在大多数情况下工作,但用户必须重新启动应用程序才能使对配置文件的任何编辑生效。对于大多数用户来说,这永远不会成为问题,但对于喜欢直接编辑配置文件的高级用户来说,这可能会令人沮丧。在基于 UNIX 的操作系统上,可以处理 SIGHUP 信号,该信号已成为重新读取配置文件的可接受触发器。我知道 Windows 没有类似的方法。另一种方法是跟踪配置文件的修改时间,以确定是否应重新读取设置。