name: 简化级联 description: 找到一个洞察来消除多个组件 - “如果这是真的,我们就不需要 X, Y, 或 Z” when_to_use: 当以多种方式实现同一概念、特殊案例累积或复杂性螺旋上升时 version: 1.1.0
简化级联
概述
有时一个洞察能消除10件事。寻找统一的原则,使多个组件变得不必要。
核心原则: “一切都是…的特殊情况” 能显著降低复杂性。
快速参考
| 症状 | 可能的级联 |
|---|---|
| 同一事物以5种以上方式实现 | 抽象出共同模式 |
| 特殊案例列表不断增长 | 找到通用案例 |
| 带例外的复杂规则 | 找到没有例外的规则 |
| 过多的配置选项 | 找到适用于95%情况的默认值 |
模式
寻找:
- 类似概念的多个实现
- 到处都有特殊案例处理
- “我们需要分别处理 A, B, C, D…”
- 带许多例外的复杂规则
提问: “如果它们在底层都是同一回事呢?”
示例
级联 1: 流抽象
之前: 批处理、实时、文件、网络数据的单独处理器 洞察: “所有输入都是流 - 只是不同的来源” 之后: 一个流处理器,多个流来源 消除: 4个单独的实现
级联 2: 资源治理
之前: 会话跟踪、速率限制、文件验证、连接池(都分开) 洞察: “所有都是按实体的资源限制” 之后: 一个ResourceGovernor,带4种资源类型 消除: 4个自定义执行系统
级联 3: 不可变性
之前: 防御性复制、锁定、缓存失效、时间耦合 洞察: “将所有内容视为不可变数据 + 转换” 之后: 函数式编程模式 消除: 整个同步问题类
过程
- 列出变化 - 什么被以多种方式实现?
- 找到本质 - 在底层相同的是什么?
- 提取抽象 - 什么是领域无关的模式?
- 测试它 - 所有案例都能干净地适应吗?
- 测量级联 - 有多少东西变得不必要?
你错过级联的红旗
- “我们只需要再加一个案例…” (无限重复)
- “这些都相似但不同” (也许它们相同?)
- 重构感觉像打地鼠(修复一个,打破另一个)
- 不断增长的配置文件
- “别碰那个,很复杂” (复杂性隐藏模式)
记住
- 简化级联 = 10倍赢面,不是10%改进
- 一个强大的抽象 > 十个巧妙的技巧
- 模式通常已经存在,只需要识别
- 以"我们能删除多少东西?"来测量