为什么这么多程序使用“foo.bar.baz = qux”风格的配置?

cpa*_*ast 3 tree configuration-managment

我注意到大量程序将配置信息存储在各种层次结构键中。例如,Firefoxabout:config有像network.http.pipeliningnetwork.http.pipelining.ssl和这样的键network.http.use-cache。我在 Firefox、OS X ( Library/Preferences)、 insysctl等中注意到了这种配置风格。为什么如此普遍?有没有一些早期的程序使用它,所以其他人复制了它?

mto*_*one 5

这种分层约定是为了提供清晰度,帮助我们了解每个设置的影响范围,并在各个模块中区分具有相同或不明确名称的多个设置。

这在具有太多可能设置以包含在主用户选项页面(其中层次结构由选项卡或页面显示)中的应用程序中非常有用,并且是更容易出现用户错误的普通INI 文件(带有[title]部分分隔符)的一个很好的替代方案并且通常需要重新启动应用程序才能生效。

分层设置也可能在一定程度上反映了开发人员使用的内部自顶向下的面向对象模型

层次的形象

在这个示例模型中,我们可以很好地想象那里有一个 person.professor.disallow_strikes = true 设置,而 student.disallow_strikes 可以保持为 false 或根本不可用。这种划分也是编程语言中命名空间的基础(流行的 .NET 框架遵循完全相同的命名约定:)using System.Threading.Tasks

因此,我们现在可以假设network.http.xxx设置不应该对network.ftp或 其他网络子模块产生影响,而network.xxx设置可能会对所有子模块产生影响。

额外的信息是有益的...

  • 对于用户:我们对给定设置会影响应用程序的哪个部分有了更好的了解,从而使问题更容易解决(并避免!)

  • 对于开发人员:处理特定模块或对其进行故障排除的人员可以很容易地意识到哪些用户可修改的设置会影响他/她的当前工作并专注于此。