Configuration 配置读取的默认设置失败

Configuration 配置读取的默认设置失败,configuration,default,config,Configuration,Default,Config,我有一种将配置文件解析到字典中的方法。如果缺少配置参数,我不确定它应该如何工作。它应该使用默认值并记录错误还是引发异常?我建议您将:(1)解析配置文件并将解析的详细信息存储到字典中,与(2)从字典中检索名称=值对分开。这种关注点分离将使您能够为(2)提供一个重载API,指定缺少的name=value对是否会导致返回默认值或引发异常。例如(伪代码): 我还建议API应该提供类型安全的查找方法,例如lookupInt(),lookupBoolean(),lookupDouble()等等。如果无法将查

我有一种将配置文件解析到字典中的方法。如果缺少配置参数,我不确定它应该如何工作。它应该使用默认值并记录错误还是引发异常?

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

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

编辑以回复评论


“谢谢你给我举个例子。我更想知道这是否是个好主意 如果配置错误,请提供默认设置并启动应用程序。“

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

但是,我认为您不必将缺少的名称=值对视为错误。相反,对缺少的值使用默认值是有效的。如果允许所有配置名称=值对都是可选的,那么您的应用程序将能够“开箱即用”,而不需要任何配置文件,这无疑提高了应用程序对新用户的易用性


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

感谢您的示例。我更想知道,如果配置错误,甚至提供默认设置并启动应用程序是否是个好主意。感谢您的澄清。
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