Skip to content

Latest commit

 

History

History
58 lines (42 loc) · 2.49 KB

File metadata and controls

58 lines (42 loc) · 2.49 KB
name metaframe-solid-principles
category engineering
description SOLID 原则 | Code & Engineering

SOLID 原则

英文名: SOLID Principles
分类: 编码实践
作者: Robert C. Martin, 2000
复杂度: intermediate
成熟度: foundational
AI 相关: ❌ 否

简介

面向对象设计的五大原则,打造可维护、灵活的代码

核心概念

  • 单一职责原则:一个类应当只有一个变更原因,使每个模块对应一个参与者或利益相关方
  • 开闭原则:软件实体应对扩展开放、对修改封闭,在不触碰已有代码的前提下引入新行为
  • 里氏替换原则:超类的对象应当可以被其子类的对象替换而不破坏程序正确性
  • 接口隔离原则:客户端不应被迫依赖其不使用的接口
  • 依赖倒置原则:高层模块应依赖抽象,而非低层具体实现

使用步骤

  1. 单一职责:确保每个类或模块只有一个变更原因,将关注点隔离到独立单元中
  2. 开闭原则:设计对扩展开放(通过接口、插件)但对现有代码修改封闭的模块
  3. 里氏替换:验证子类型可以替换其基类型而不改变程序的正确性
  4. 接口隔离:将大接口拆分为更小的客户端专用接口,避免实现者依赖未使用的方法
  5. 依赖倒置:依赖抽象而非具体实现;通过构造函数或配置注入依赖

适用场景

['设计需要长期演进的面向对象系统', '重构遗留代码库以提升模块化和可测试性', '为共同维护共享库的团队建立编码规范', '构建需要可扩展性的插件式架构']

最佳实践

✅ 推荐做法

  • 优先使用组合而非继承,因为组合天然符合单一职责并减少紧耦合
  • 从客户端视角定义接口,因为这能确保符合接口隔离原则
  • 通过构造函数注入依赖,因为这使类可测试且明确表达其需求
  • 在重构过程中渐进式地应用 SOLID,因为过早抽象会增加不必要的复杂性

❌ 避免做法

  • 不要创建处理多个不相关职责的上帝类,因为它们会成为变更磁铁
  • 不要在子类中抛出意外异常来违反 LSP,因为调用方依赖基类型契约
  • 不要构建迫使实现者编写空桩方法的臃肿接口,因为这会造成令人困惑的 API
  • 不要对简单脚本教条式地应用 SOLID,因为在小型代码库中其开销大于收益

Sources: SDFrame (Software Design) MetaFrame: 💻 Code & Engineering / 编码与工程