SOLID 原则回顾

SOLID 原则回顾围绕 5 个章专属概念,以边界模型、决策轨迹、违规恢复和来源分层完成验收。

学习目标

  • 能解释“SOLID 原则回顾”如何把五条原则还原成管理变化来源、扩展方向、替换合同、接口负担和源码依赖的设计判断
  • 能逐项定位 单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP),并说明每个概念在当前来源边界内承担什么责任
  • 能按 找变化参与者 → 写调用合同 → 构造替换样本 → 缩小依赖面 → 核对源码方向 推演“折扣策略扩展”,检查“调用方依赖的合同在扩展与替换后仍成立,变化被限制在真正承担该责任的模块内”
  • 能注入“按首字母套模板,制造大量单方法接口和无业务含义的抽象层”,依据变化原因清单、替换合同测试、客户端依赖面、扩展差异与源码 import 图定位越界、撤销并用同一情境重放

为什么从“把原则当作诊断耦合和设计边界的约束,而不是要求每个类都同时展示五种结构”开始

把五条原则还原成管理变化来源、扩展方向、替换合同、接口负担和源码依赖的设计判断。本页先画责任和依赖,再沿具体情境执行决策,最后主动制造一个边界违规;这种顺序把术语变成可以验证、推翻和恢复的设计合同。

“SOLID 原则回顾”不是技术采购建议。它处理的是规则放在哪里、模型在哪个语境内成立、哪些变化可以被隔离,以及团队如何判断一条边界已经被穿透。最终功能可运行,只能证明快乐路径存在,不能证明结构允许安全演进。

来源、版次与课程边界

SOLID 的章节范围依据 Pearson 的 Clean Architecture 目录核定;本页不复现未公开书文,例子和推演为平台独立创作,依赖方向再以作者公开文章交叉核对。

本专题不是某一本既有书的中文版,也不是把多位作者的文章拼成“原著章节”。课程主干分别取自 Eric Evans 的领域驱动设计体系与 Robert C. Martin 的整洁架构体系;CQRS、事件溯源和六边形架构始终标为扩展。以下链接承担不同事实责任:

本页采用独立中文重写。能从公开全文或授权摘要核对的定义才作为来源事实;项目情境、交互实验、取舍表和练习答案均为本站教学设计。

核心概念与可观察责任

单一职责原则(SRP)

一个模块应对同一类参与者或变化原因负责;“只做一件事”过于含糊,关键是不同利益相关方的变化不要互相牵连。 在“折扣策略扩展”中,观察重点是调用方依赖的合同在扩展与替换后仍成立,变化被限制在真正承担该责任的模块内。

开闭原则(OCP)

当预期变化出现时,应通过新增实现扩展行为并保护稳定调用方;它要求先识别真实变化轴,而不是预先抽象一切。 在“胖接口拆分”中,观察重点是变化原因清单、替换合同测试、客户端依赖面、扩展差异与源码 import 图。

里氏替换原则(LSP)

实现必须保持调用方依赖的前置条件、后置条件和行为语义;类型能通过编译不代表运行合同可以安全替换。 在“折扣策略扩展”中,观察重点是调用方依赖的合同在扩展与替换后仍成立,变化被限制在真正承担该责任的模块内。

接口隔离原则(ISP)

客户端不应被迫依赖自己不用的方法;接口按客户端需要塑形,能减少无关变化和部署单元之间的连带影响。 在“胖接口拆分”中,观察重点是变化原因清单、替换合同测试、客户端依赖面、扩展差异与源码 import 图。

依赖倒置原则(DIP)

高层政策与低层细节都依赖稳定抽象,且抽象由政策侧需要定义;它关注源码依赖方向,不等于到处使用依赖注入容器。 在“折扣策略扩展”中,观察重点是调用方依赖的合同在扩展与替换后仍成立,变化被限制在真正承担该责任的模块内。

一条可执行的设计判断

本页采用以下判断链:把原则当作诊断耦合和设计边界的约束,而不是要求每个类都同时展示五种结构。正常情况下必须持续保持“调用方依赖的合同在扩展与替换后仍成立,变化被限制在真正承担该责任的模块内”;反例“按首字母套模板,制造大量单方法接口和无业务含义的抽象层”只改变一个关键条件,便于定位因果。

观察项本页合同
最小正常情境新增会员折扣但结算调用方不应修改
边界或迁移情境报表客户端被迫依赖写入和删除方法
必须保持调用方依赖的合同在扩展与替换后仍成立,变化被限制在真正承担该责任的模块内
首要违规按首字母套模板,制造大量单方法接口和无业务含义的抽象层
验收证据变化原因清单、替换合同测试、客户端依赖面、扩展差异与源码 import 图

先预测,再操作三个本页实验

分步1 / 3

实验一:边界与模型地图

操作前先预测“折扣策略扩展”里哪一侧拥有规则、哪一侧只是技术或协作细节。切换概念和情境后,检查“把原则当作诊断耦合和设计边界的约束,而不是要求每个类都同时展示五种结构”是否仍能解释三块区域的责任。

Boundary model

SOLID 原则回顾:边界与责任地图

把五条原则还原成管理变化来源、扩展方向、替换合同、接口负担和源码依赖的设计判断

切换最小情境

定位正式概念

architecturedomaindesign-02 · 当前观察

单一职责原则(SRP)新增会员折扣但结算调用方不应修改

区域 1变化来源

SRP 区分不同参与者的修改

区域 2行为合同

OCP、LSP 与 ISP 保护调用方

区域 3依赖方向

DIP 让细节指向政策抽象

情境验收

新增策略实现并用同一合同测试替换,不让结算层识别具体类型

易错边界与取舍

练习与答案

练习

问题 1:概念—边界—证据对照。 完成以下逐项核对:

  1. 单一职责原则(SRP):写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
  2. 开闭原则(OCP):写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
  3. 里氏替换原则(LSP):写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
  4. 接口隔离原则(ISP):写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
  5. 依赖倒置原则(DIP):写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。

问题 2:最小情境推演。 怎样验证“折扣策略扩展”没有靠最终功能碰巧通过?

问题 3:替代方案与恢复。 注入“按首字母套模板,制造大量单方法接口和无业务含义的抽象层”后,怎样比较修复与更简单方案?

本页小结

  • SOLID 原则回顾的核心判断是:把原则当作诊断耦合和设计边界的约束,而不是要求每个类都同时展示五种结构。
  • 正常路径以“新增策略实现并用同一合同测试替换,不让结算层识别具体类型”验收,不能只检查接口返回成功。
  • 边界路径以“按客户端需要分离查询接口,避免写模型变化触发报表重编译”验收,并保存变化原因清单、替换合同测试、客户端依赖面、扩展差异与源码 import 图。
  • 如果“按首字母套模板,制造大量单方法接口和无业务含义的抽象层”仍可静默通过,说明边界只是图示,没有成为可执行约束。

讨论

评论区加载中…