配置选项的优先级顺序:环境变量、注册表、配置文件和命令行,它们的顺序是什么?

12

这是一个有趣的小问题,我认为Stack Overflow之前没有讨论过。虽然不是生死攸关的问题,但我很想听听您的意见。

简而言之:我的程序在这方面有点过度设计:它从四个不同的位置获取配置选项:

  • 命令行参数
  • 配置文件
  • 环境变量
  • Windows注册表
  • (以及硬编码的默认值)

问题是,应该按什么顺序评估这些配置?我认为命令行参数具有最终决定权,但其他三个位置呢?如果在环境变量和ini文件中都设置了相同的选项,哪个应该优先?

那么注册表呢?如果我使用注册表来更改程序的运行时设置,注册表是否会覆盖ini文件?我是否应该将应用于注册表的更改重新编写到配置文件中?是否应该设置注册表设置无法覆盖从环境读取的设置?

(如果你想知道这怎么可能,只需要一个词:X-macro。)


好的,事情肯定发生了,所以我想我应该说一下我在一个月里学到的东西:我使用环境变量进行安装时配置,因此必须覆盖配置文件;我使用注册表进行运行时配置(带有丑陋的 MS Forms gui!),因此它有最后的决定权,除非设置了命令行标志,否则将在该会话期间覆盖注册表。几乎可以接受,我觉得我差不多掌握了这个“软件开发”的技能。 - VITTUIX-MAN
相关:https://dev59.com/EGgu5IYBdhLWcg3wy558 - Pedro
1个回答

13
按优先级排序,我会这样做:cli > envvars > registry > config > defaults
  • cli:当您手动启动程序时,它将获取您肯定想使用的选项。
  • envvar:通常用于在运行时手动覆盖配置文件选项(今天在容器环境中管理配置选项也经常使用,参见12因素应用程序)
  • registry:特定于Microsoft Windows世界,但根据您所说,它几乎具有与环境变量相同的目的
  • config:在安装/配置时定义,因此这些是“用户想要的默认选项”
  • defaults:最小配置以便在没有提供其他内容时可以“安全地”运行(例如仅在本地主机上监听)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接