配置读取的默认设置失败

时间:2013-08-05 08:41:11

标签: configuration default config

我有一种方法可以将配置文件解析为字典。如果缺少配置参数,我不确定它应该如何表现。它应该使用默认值并记录错误或引发异常吗?

1 个答案:

答案 0 :(得分:0)

我建议您分开:(1)解析配置文件并将解析后的详细信息存储到字典中,从(2)从字典中检索 name = value 对。这种关注点分离将使您能够为(2)提供重载的API,指定缺少的 name = value 对是否应该导致返回默认值或引发异常。例如(伪代码):

cfg = parseConfigurationFile("example.cfg")
x = cfg.lookupString("x"); // throws an exception if the name=value is missing
y = cfg.lookupString("y", "hello, World!"); // returns default value if name=value is missing

我还建议API应提供类型安全的查找方法,例如lookupInt()lookupBoolean()lookupDouble()等。如果无法将查找的值解析为指定的类型,那么这些方法应抛出异常。

编辑以回复评论

  

“谢谢你的例子。我更想知道这是不是一个好主意   提供默认设置并在配置错误时启动应用程序。“

我喜欢Fail Fast Principle,因此我建议如果任何配置数据无效,您的应用程序应报告错误并停止,而不是尝试静默修复错误(可能使用默认值而不是错误的配置值)并继续。

但是,我认为您不一定要将缺少的名称=值对视为错误。相反,对缺失值使用默认值是有效的。如果你通过允许 all 配置名称=值对是可选的,那么你的应用程序将能够在没有任何配置文件的情况下“开箱即用”工作,这可以说是改善了应用程序对新用户的易用性。

几年前,我写了Config4*(用于解析特定配置文件语法的C ++和Java库)。 Config4 *提供了一种优雅的方式,使任何/所有name = value对都是可选的:这就是Config4 *手动调用后备配置的内容。如果您想了解这一点,那么我建议您浏览一下 Config4 *入门指南的第2章,以了解配置语法,然后阅读同一手册的第3章。了解API。请特别注意第3.6.2节(解析嵌入式配置)和3.6.3(使用后备配置)。