You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中替代多层嵌套if else方案咨询:AWS CloudWatch事件处理场景

优化方案:策略模式+配置表替代嵌套if/else

核心思路是将不同Namespace的处理逻辑抽离为独立的配置映射表,实现逻辑与数据分离,后续新增Namespace仅需新增配置项,无需修改主判断逻辑,彻底解决多层嵌套判断的可维护性问题。

具体实现代码

// 1. 定义Namespace策略配置表:按优先级配置每个服务的维度组合规则
const namespaceConfig = {
  "AWS/ApiGateway": [
    ['ApiId', 'Stage'],
    ['ApiName', 'Stage'],
    ['ApiId'],
    ['ApiName']
  ],
  "AWS/S3": [
    ['BucketName', 'StorageType']
  ],
  "AWS/Lambda": [
    ['FunctionName']
  ],
  "AWS/Logs": [
    ['LogGroupName']
  ]
  // 后续新增其他Namespace仅需在此处加对应配置即可
}

// 2. 通用维度值拼接函数:按规则优先级匹配第一个符合条件的维度组合
function getDimensionsValue(config) {
  for (const dimensionGroup of config) {
    // 判断当前组合的所有维度是否都存在
    const allExist = dimensionGroup.every(key => dimensionName(key))
    if (allExist) {
      // 拼接对应维度值返回
      return dimensionGroup.map(key => dimensionValue(key)).join('_')
    }
  }
  // 无匹配规则时返回默认值,可按需调整
  return ''
}

// 3. 主逻辑仅需一行,无任何嵌套判断
const sns_DimensionsValue = getDimensionsValue(namespaceConfig[sns.Trigger.Namespace])

方案优势

  • 可读性强:所有Namespace的维度规则集中在配置表中,一目了然,无需逐层扒if判断逻辑
  • 可扩展性好:新增AWS服务的判断规则,仅需在namespaceConfig中加一行配置,无需修改主逻辑
  • 易维护易测试:通用拼接逻辑和配置规则完全分离,可单独对配置项、通用函数做单元测试

特殊场景扩展

如果后续出现某类Namespace的判断逻辑非常复杂,无法用简单的维度组合规则实现,可将配置项改为函数处理,灵活兼容所有场景:

const namespaceConfig = {
  // 复杂逻辑用函数实现
  "AWS/XXService": () => {
    // 自定义处理逻辑,返回拼接后的结果
    if(xxx) return 'xxx'
    return 'yyy'
  },
  "AWS/ApiGateway": [
    ['ApiId', 'Stage'],
    ['ApiName', 'Stage'],
    ['ApiId'],
    ['ApiName']
  ]
}

// 对应调整通用函数即可
function getDimensionsValue(config) {
  if (typeof config === 'function') return config()
  for (const dimensionGroup of config) {
    const allExist = dimensionGroup.every(key => dimensionName(key))
    if (allExist) {
      return dimensionGroup.map(key => dimensionValue(key)).join('_')
    }
  }
  return ''
}

内容的提问来源于stack exchange,提问作者user630702

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:24:06