【发布时间】:2013-08-05 08:41:11
【问题描述】:
我有一种将配置文件解析为字典的方法。如果缺少配置参数,我不确定它应该如何表现。它应该使用默认值并记录错误还是引发异常?
【问题讨论】:
标签: configuration default config
我有一种将配置文件解析为字典的方法。如果缺少配置参数,我不确定它应该如何表现。它应该使用默认值并记录错误还是引发异常?
【问题讨论】:
标签: configuration default config
我建议您将:(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,所以我建议如果任何配置数据无效,你的应用程序应该报告错误并停止,而不是尝试默默地修复错误(也许通过使用默认值而不是错误的配置值)并继续。
但是,我认为您不必将 missing name=value 对视为错误。相反,对缺失值使用默认值是有效的。如果您通过允许 all 配置 name=value 对是可选的来实现这一点,那么您的应用程序将能够在没有任何配置文件的情况下“开箱即用”工作,这可以说是提高了应用程序对新用户的易用性。
几年前,我写了Config4*(用于解析特定配置文件语法的C++ 和Java 库)。 Config4* 提供了一种优雅的方式来使任何/所有名称=值对成为可选:这就是 Config4* 手册所称的后备配置。如果您想了解这一点,那么我建议您先略读Config4* 入门指南的第 2 章以了解配置语法,然后阅读同一手册的第 3 章以了解了解 API。请特别注意第 3.6.2 节(解析嵌入式配置)和第 3.6.3 节(使用备用配置)。
【讨论】: