知识卡片
配置化编程:用函数式语言生成配置而非手写
内容
编程默认有编辑器、语法校验、重构、版本控制等工具支持,”配置”通常没有——设计消息传递架构时,用本地XML文件配置组件的通道连接看似方便,实则容易因通道名称或组件链接顺序写错而导致交互失败;把配置文件提交到源代码控制系统并建立相应校验工具,像对待代码一样对待配置,才有助于调试和故障检测。真正合理的配置用法(如把运行时参数注入分布式服务实例)往往也是由编程语言计算生成的,例如谷歌为大量参数略有差异的进程实例生成配置时,不是手写每份配置文件,而是用一种名为BCL的函数式语言(支持模板、数值继承、map()等操作),并配上交互式表达式计算器和单元测试工具来测试调试配置——这说明编程和配置的界限归根结底是模糊的,二者都需要设计、测试、版本控制和部署管理。
结构图:
flowchart TB
A["手写每个实例的配置文件<br/>=麻烦且易错"]
B["用函数式配置语言(如BCL)<br/>生成配置:模板+继承+map()"]
A -.规模扩展时问题加剧.-> A
B --> C["配上表达式计算器+单元测试<br/>=像对待代码一样对待配置"]
C --> D["编程与配置的界限本质模糊"]
参考来源
- 位置:《架构师应该知道的37件事》第2章《架构》之"2.4 别有代码恐惧症"·"2.4.9 工具化"与"2.4.11 配置还有用武之地吗"(源文件:_epub-src/OEBPS/Text/chapter002.html)
- 结论依据:原文说明"通过把配置文件提交到源代码控制系统并且创建相应的校验和管理工具,来平等对待配置文件和代码,这有助于调试和故障检测……谷歌团队使用一种名为BCL的定义良好的函数式语言来生成配置……软件开发人员编写了一个可交互的表达式计算器以及单元测试工具",直接支撑本卡结构图。
- 原始内容:抽象是个非常有用的东西,但是请相信,仅仅靠使用抽象"配置"就可以降低复杂度或者不需要聘用开发人员都是很常见的谬论。