SOLID 速览
SOLID 是五个面向对象设计原则的缩写,由 Robert C. Martin 归纳:单一职责、开闭、里氏替换、接口隔离、依赖倒置。它们分别回答职责如何划分、扩展点放哪里、子类型能否安全替换、接口该多小、依赖方向朝向谁。五条都不是评分标准,而是描述问题的语言——用来指出结构上的具体风险,而不是给代码打分。
基本信息
| 来源 | Robert C. Martin 归纳的面向对象设计原则集合 |
|---|---|
| 组成 | SRP 单一职责、OCP 开闭、LSP 里氏替换、ISP 接口隔离、DIP 依赖倒置 |
| 使用方式 | 按当前痛点选一条先落地,而不是同时追求五条 |
| 常见误用 | 把原则当作抽象数量的指标,为指标而抽象 |
SOLID 五项速览
| 缩写 | 原则 | 一句话记忆 | 典型信号 |
|---|---|---|---|
| S | 单一职责 SRP | 一个变化原因 | 类因多方需求被反复改 |
| O | 开闭原则 OCP | 加扩展少改旧码 | 新需求都要动同一段分支判断 |
| L | 里氏替换 LSP | 子类可安全替换 | 子类抛出不支持异常 |
| I | 接口隔离 ISP | 接口按调用方拆 | 实现类大量空方法 |
| D | 依赖倒置 DIP | 都依赖抽象 | 业务代码直接依赖框架类型 |
怎么用这五条
- 先用它描述问题:说清哪条原则被破坏、具体后果是什么,再谈改法。
- 按痛点选一条:当前最疼的是修改牵一发动全身,就先处理职责与开闭。
- 结合变化预判:没有变化压力的抽象只会增加跳转成本。
- 与测试配合:原则落地的效果是修改范围变小,这一点能在测试与改动成本上体现。
- 用信号代替口号:与其说「违反了开闭原则」,不如指出「每加一种类型都要改这段判断」。
- 引用具体位置:指出类名与行为,比引用原则名称更容易让作者认同并采取行动。
顺序无优先级:按当前痛点选一条先落地,比同时追求五条更可行。
原则是权衡工具而非评分表:抽象层次越多,理解成本越高,收益必须来自真实的变化压力。