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