知识卡片
区分配置与编程:给的是代码还是数据
内容
什么层次的抽象才该叫”配置”而非”高级编程”?供应商演示会让人误以为用图形界面或XML/JSON/YAML写的都是配置,但用XSLT编码明明就是货真价实的编程。更好的判断标准是:你提供给系统的是可执行代码,还是只是一段数据?若算法已预先定义好,你只是提供几个关键值(如把用户按年龄分儿童/成人/老人的阈值18和65),称为配置是合理的——但这样的配置仍能搞砸程序:若先输65再输18,判断顺序不同结果就不同,具体行为取决于代码里if-else的判断顺序,无法预测。用决策表定义这种行为比输两个孤立数值更有表现力、更不易出错,说明代码和数据的界限并不是非黑即白,尤其当输入的数据本身决定执行顺序(如声明式语言、规则引擎配置)时。
结构图:
flowchart LR
Q["提供给系统的是什么?"]
Q --> D["纯数据(预定义算法+关键值)<br/>=配置,较安全但仍可能出错"]
Q --> C["可执行代码/决定执行顺序的数据<br/>=编程"]
D -.顺序依赖问题.-> X["如先输65再输18导致判断错误"]
D -.更好方案.-> T["用决策表替代孤立数值"]
参考来源
- 位置:《架构师应该知道的37件事》第2章《架构》之"2.4 别有代码恐惧症"·"2.4.6 配置"与"2.4.7 代码还是数据"(源文件:_epub-src/OEBPS/Text/chapter002.html)
- 结论依据:原文说明"一个更好的决策标准是,你提供给系统的是可执行代码,还是只是一段数据……如果你意外地先输入了65,然后才输入18,此时,程序应该不会像期望的那样工作……比起输入两个数值,决策表更有表现力,也更加不易出错",直接支撑本卡结构图。
- 原始内容:任何使用XSLT(包含在XML文件中)编码的人都可以证明,那不是配置,而是货真价实的编程。