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