首页/系统与基础设施/自动化运维速查/配置数据与逻辑的分离设计
配置管理与编排60 条

配置数据与逻辑的分离设计

配置数据与逻辑分离把取值放在数据文件或配置中心、把结构与规则放在模板与代码中,检验标准是新增同类目标只需加数据不改逻辑。数据里不应出现表达式与特判分支。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​​​‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​​‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

配置数据与逻辑的分离设计是什么

数据与逻辑分离指把「描述事实的值」与「处理这些值的规则」分开存放:值放在数据文件或配置中心,按环境、按站点组织;规则与结构放在模板或代码里,可测试、可评审。分离的收益是改值不需要改逻辑、评审差异清晰、同一逻辑可作用于多组数据、测试可以只针对规则编写。混合的典型坏味道是模板里出现「某站点特别处理」的分支,或数据文件里夹带表达式与判断。

基本信息

数据侧环境值、站点参数、地址与规模等事实
逻辑侧模板结构、渲染规则、条件与校验
判断标准改值是否需要动逻辑、逻辑是否可独立测试
坏味道站点特判分支、数据文件里的表达式
收益评审清晰、逻辑可复用与可测试

典型使用场景

  • 多站点共用一套渲染逻辑,仅数据不同
  • 环境差异只体现在数据文件中
  • 把站点特判重构为数据驱动的参数
  • 对渲染逻辑写单元测试而不依赖真实环境
  • 让非开发人员也能安全修改数据取值

数据与逻辑分离示意

数据与逻辑分离示意
# 数据文件:只放取值与事实
站点A: { 地址段: ..., 上游: ..., 规模: 中 }
站点B: { 地址段: ..., 上游: ..., 规模: 大 }
# 逻辑模板:规则集中在此,可测试
- 按规模选择实例数档位
- 按地址段渲染接口配置
# 坏味道:模板里出现「若站点等于某站点」的硬编码特判
# 目标:新增同类站点只加数据,不改逻辑与模板

位置与内容边界

位置应放内容不该放内容
数据文件具体取值与事实表达式与判断逻辑
模板与代码结构、条件、校验规则站点或环境的硬编码特判
配置中心环境级取值结构性规则
测试用例规则逻辑验证依赖真实环境的取值
判断分离是否成功的实用检验:新增一个同类站点时,是否只需要追加数据而不用改模板。如果必须改模板,说明逻辑与数据仍然耦合。
数据文件里的表达式会把数据变成不可静态校验的代码:取值合法性无法用简单规则检查,评审也难以判断影响。表达式应回到逻辑层。

易错点

  • 模板里出现针对具体站点的硬编码分支,新增站点必须改模板并重新评审逻辑
  • 数据文件里夹带表达式与判断,取值合法性无法静态校验
  • 逻辑与数据混在同一文件,评审时无法区分改的是值还是规则
  • 为兼容特例在逻辑层堆积分支,同一逻辑的实际行为难以推理
  • 数据无结构与约束,键名大小写或拼写不一致导致渲染结果缺失

数据来源与参考

  • 12-Factor App:配置与代码分离
  • HashiCorp Terraform 官方文档:变量与模块设计
  • Ansible 官方文档:变量分层与角色结构

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/config-data-logic-separation.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​​​‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​​‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​