编程原则

SOLID · 设计原则 · 编码哲学 — 写出好代码的底层逻辑

SOLID 五项原则
S
单一职责原则
Single Responsibility Principle
一个类只应该有一个引起变化的原因。每个模块只负责一件事,职责越单一,越容易理解、测试和维护。
O
开闭原则
Open/Closed Principle
对扩展开放,对修改关闭。新增功能时应该扩展已有代码(继承、组合、插件),而不是修改已有稳定代码。
L
里氏替换原则
Liskov Substitution Principle
子类应该可以完全替换父类而不破坏程序正确性。不重写父类非抽象方法、不强化前置条件、不弱化后置条件。
I
接口隔离原则
Interface Segregation Principle
不应强迫客户端依赖它不使用的方法。大接口拆成多个小接口,调用方只知道自己关心的方法。
D
依赖倒置原则
Dependency Inversion Principle
高层模块不应依赖低层模块,两者都应依赖抽象。抽象不应依赖细节,细节应依赖抽象。面向接口编程而非面向实现。
通用设计原则
K
KISS — Keep It Simple, Stupid
保持简单
绝大多数工程问题都可以用简单方案解决。能用一个函数搞定的不要引入设计模式,能用 if 说清楚的不建状态机。简单本身就是最高级的复杂。
D
DRY — Don't Repeat Yourself
不要重复自己
每一条知识在系统中应该有唯一、明确的表示。发现第三份重复时再抽——前两份很可能是巧合。
Y
YAGNI — You Ain't Gonna Need It
你不需要它
不要为"万一将来需要"写代码。每行不需要的代码都是负资产——要读、要测、要改、要防 bug。等到真正需要时再写。
L
Less is More
少即是多
代码越少 bug 越少。删除比新增更有价值。好的 API 只有两三个方法,好的函数参数不超过三个,好的模块只暴露一个入口。
C
组合优于继承
Composition over Inheritance
继承是白盒复用(知道父类实现),耦合最紧;组合是黑盒复用(只依赖接口),更灵活。能用接口 + 组合的场合,优先于继承层级。
L
迪米特法则(最少知识原则)
Law of Demeter
一个对象应对其他对象有尽可能少的了解。只与直接的朋友通信,不要和"朋友的朋友"说话。避免 a.b().c().d() 链式穿透。
S
关注点分离
Separation of Concerns
把程序拆成不同"关注面"(数据、展示、业务逻辑),每个关注面独立变化。MVC、MVVM、微服务都源自这个原则。
一句话速查
原则一句话
开闭原则加新功能不改旧代码
单一职责一类只干一件事
依赖倒置依赖抽象不依赖具体
里氏替换子类能无缝替换父类
接口隔离不强迫实现不需要的方法
KISS能用简单方案就别搞复杂
DRY第三份重复再抽
YAGNI不要为"可能"写代码
组合优于继承接口+组合比继承灵活
迪米特法则别跟陌生人说话