为什么我不能只使用 Python 代码进行配置?
许多应用程序通常避免使用不同的标记语言进行配置,而是允许使用代码进行配置。一个著名的、毫不掩饰的例子是 Django,它要求所有配置都放在一个名为“settings.py”或类似的文件中。
从一开始这似乎是一个好主意 - Python 比任何配置语言都更加灵活,因此,例如,如果你想使用列表推导式或读取文件或调用 API 来填充值,你可以这样做。
然而,这种灵活性带来了许多陷阱和难看的缺陷。特别是 Django 中的缺陷 被 Ned Bachelder 在他的博客上明确总结了 - 这些缺陷多年来导致了无数 bug。
语言表达能力的权衡适用于代码的每个级别
- 我们需要更少功能的语言.
- 最小权力法则 (维基百科).
- 蒂姆·伯纳斯·李 提出的最小权力原则.
- 杰夫·阿特伍德(Coding Horror 博客作者/Stack Overflow 创始人)提出的最小权力原则.
实际上,一种好的重构方法是将一大块图灵完备的 Python 代码直接转换为 StrictYAML,不会损失任何表达能力,例如,将一个翻译字符串、国家或参数列表进行转换。
这也使其他程序或模板语言更容易生成标记。虽然你可以使用图灵完备的代码来做到这一点,但它通常会导致调试噩梦 - ">问问 C++ 程序员吧!