Configuration 命令行参数还是配置文件?

Configuration 命令行参数还是配置文件?,configuration,command-line,parameters,Configuration,Command Line,Parameters,我正在开发一种工具,可以执行多种类型的分析,每种分析都可以有不同程度的彻底性。此应用程序在启动前将提供相当多的选项。我开始使用一个配置文件来实现它,因为指定的分析类型很少。随着实现的选项数量的增加,我创建了更多的配置文件。然后,我开始混合一些命令行参数,因为有些选项只能是标志。现在,我已经将一堆命令行参数与配置文件混合在一起,我觉得需要重构 我的问题是,何时以及为什么要使用命令行参数而不是配置文件,反之亦然 这可能与你使用的语言、个人喜好等有关吗 编辑:我正在开发一个可以在Windows和Mac

我正在开发一种工具,可以执行多种类型的分析,每种分析都可以有不同程度的彻底性。此应用程序在启动前将提供相当多的选项。我开始使用一个配置文件来实现它,因为指定的分析类型很少。随着实现的选项数量的增加,我创建了更多的配置文件。然后,我开始混合一些命令行参数,因为有些选项只能是标志。现在,我已经将一堆命令行参数与配置文件混合在一起,我觉得需要重构

我的问题是,何时以及为什么要使用命令行参数而不是配置文件,反之亦然

这可能与你使用的语言、个人喜好等有关吗


编辑:我正在开发一个可以在Windows和Mac上运行的java应用程序。我现在没有GUI。

my vote=ala mysqld.exe

命令行参数对于快速覆盖配置文件中的某些参数设置非常有用。同样,如果没有那么多参数,命令行参数也很有用。对于您的情况,我建议您将参数预设导出到命令行。

什么环境/平台?在Windows中,您更希望使用配置文件,甚至gui中的配置面板/窗口。

命令行参数: 优点:

  • 简明-无需自行维护额外的配置文件
  • 与bash脚本的良好交互-例如变量替换、变量引用、bash数学等
  • 缺点:

  • 随着选项变得更加复杂,它可能会持续很长时间
  • 格式化是不灵活的-除了一些帮助您解析高级开关的命令行实用程序等,任何更复杂的东西(例如嵌套的结构化信息)都需要自定义语法,例如使用正则表达式,并且结构可能非常严格-而JSON或YAML很难在命令行级别指定
  • 配置文件: 优点:

  • 它可以非常大,你需要它多大就多大
  • 格式更灵活-您可以使用JSON、YAML、INI或任何其他结构格式以更人性化的方式表示信息
  • 缺点:

  • 无法灵活地与bash变量替换和引用(以及bash math)交互—如果希望配置文件是“通用的”和可重用的,则可能必须定义自己的替换规则,而这是使用命令行参数的最大优势—在配置文件中变量数学将很困难(如果不是不可能的话)-您必须在配置文件中定义自己的“运算符”,或者必须依赖另一个bash脚本来执行变量数学,并执行自定义变量替换,以便“通用”配置文件可以“具体可用”
  • 要准备好一个通用配置文件(具有自定义定义的变量替换规则),仍然需要一个bash脚本来执行实际的替换,并且您仍然需要对命令行进行编码以接受所有的变量替换,因此您要么拥有不带变量替换的配置文件,这意味着您需要“硬编码”并针对不同的场景重复配置文件,或者使用自定义变量替换规则的替换逻辑使应用程序内配置文件逻辑更加复杂

  • 在我的用例中,我重视能够进行变量替换/引用(以及bash数学)在bash脚本中,更重要的是,因为我使用相同的二进制文件来启动服务器后端集群中具有不同职责的多个服务器节点,并且我使用bash脚本作为一种容器,或者实际上是一个配置文件来启动具有不同命令行参数的多个不同节点。

    我正在开发一个java应用程序将在Windows和Mac上工作。我现在没有GUI。