我一直在思考配置文件与代码的关系,但随着时间和想法的变化,我的观点也在不断变化。然而,越来越多的时候,我都会回到我学习Lisp时所得出的结论:数据和代码之间几乎没有区别。对于配置文件而言,这个结论似乎更加明显。从正确的角度来看,Perl脚本只不过是Perl的一种配置文件而已。这对于诸如QA和分工等任务(例如谁应该负责修改配置文件)具有相当重要的影响。
从配置文件逐渐演变成完整的语言通常是缓慢而渐进的,这似乎是由于希望拥有一个通用系统。大多数项目从几个配置项开始,例如指定日志输出位置、数据查找位置、用户名和密码等等。但是,它们开始不断增长:功能可以开启或关闭,操作的时间和顺序开始受到控制,而且不可避免的是,有人想要添加逻辑(例如,如果机器是X,则使用10,如果机器是Y,则使用15)。在某个特定点上,配置文件会变成一种特定领域的语言,而且往往是编写不良的语言。
现在,为了阐明问题,这里是我的问题:
- 配置文件的真正目的是什么?
- 是否应尽可能保持配置文件简单?
- 谁应该负责对其进行更改(开发人员、用户、管理员等)?
- 它们应该在源代码控制下吗(参见问题3)?
正如我之前所说,我的答案不断变化,但现在我认为:
- 允许非程序员快速更改大量行为。
- 是的,任何非粗粒度的东西都应该写入代码中。
- 用户应该负责配置文件,而程序员则应该负责配置层,位于配置文件和代码之间,以便更细粒度地控制应用程序。
- 不需要,但更细粒度的中间层应该要有源代码控制。