| name | metaframe-solid-principles |
|---|---|
| category | engineering |
| description | SOLID 原则 | Code & Engineering |
英文名: SOLID Principles
分类: 编码实践
作者: Robert C. Martin, 2000
复杂度: intermediate
成熟度: foundational
AI 相关: ❌ 否
面向对象设计的五大原则,打造可维护、灵活的代码
- 单一职责原则:一个类应当只有一个变更原因,使每个模块对应一个参与者或利益相关方
- 开闭原则:软件实体应对扩展开放、对修改封闭,在不触碰已有代码的前提下引入新行为
- 里氏替换原则:超类的对象应当可以被其子类的对象替换而不破坏程序正确性
- 接口隔离原则:客户端不应被迫依赖其不使用的接口
- 依赖倒置原则:高层模块应依赖抽象,而非低层具体实现
- 单一职责:确保每个类或模块只有一个变更原因,将关注点隔离到独立单元中
- 开闭原则:设计对扩展开放(通过接口、插件)但对现有代码修改封闭的模块
- 里氏替换:验证子类型可以替换其基类型而不改变程序的正确性
- 接口隔离:将大接口拆分为更小的客户端专用接口,避免实现者依赖未使用的方法
- 依赖倒置:依赖抽象而非具体实现;通过构造函数或配置注入依赖
['设计需要长期演进的面向对象系统', '重构遗留代码库以提升模块化和可测试性', '为共同维护共享库的团队建立编码规范', '构建需要可扩展性的插件式架构']
- 优先使用组合而非继承,因为组合天然符合单一职责并减少紧耦合
- 从客户端视角定义接口,因为这能确保符合接口隔离原则
- 通过构造函数注入依赖,因为这使类可测试且明确表达其需求
- 在重构过程中渐进式地应用 SOLID,因为过早抽象会增加不必要的复杂性
- 不要创建处理多个不相关职责的上帝类,因为它们会成为变更磁铁
- 不要在子类中抛出意外异常来违反 LSP,因为调用方依赖基类型契约
- 不要构建迫使实现者编写空桩方法的臃肿接口,因为这会造成令人困惑的 API
- 不要对简单脚本教条式地应用 SOLID,因为在小型代码库中其开销大于收益
Sources: SDFrame (Software Design) MetaFrame: 💻 Code & Engineering / 编码与工程