Skip to content

设计原则速查 ​

SOLID 原则 ​

详见 SOLID 原则专题。

原则缩写一句话违反症状
单一职责SRP一个类只做一件事一个类因多个无关原因而修改
开闭原则OCP对扩展开放,对修改关闭新增功能迫使稳定模块反复修改
里氏替换LSP子类能替换父类子类重写后行为不一致
接口隔离ISP接口要小而专实现类被迫实现不需要的方法
依赖倒置DIP依赖抽象而非具体高层模块直接依赖低层实现

其他原则 ​

详见 其他设计原则专题。

原则说明
DRYDon't Repeat Yourself,消除重复
KISSKeep It Simple, Stupid,保持简单
YAGNIYou Aren't Gonna Need It,不过度设计
组合优于继承用组合代替继承,更灵活
最少知识原则对象只与直接朋友交互
好莱坞原则框架调用你的代码,而非你调用框架(控制反转的一种形式)

代码坏味道 ​

坏味道是待验证的设计假设,是否重构取决于职责边界、变化原因与维护成本,而非机械匹配症状与动作。详见 代码坏味道专题。

坏味道症状解药
重复代码多处相同逻辑提取方法/类
过长方法职责混杂、认知负担高提取方法
过大类类承担过多职责提取类
过长参数列表参数常共同传递、构成整体引入参数对象
发散式变化一个类因多种原因修改SRP 拆分
霰弹式修改一个修改涉及多个类移动方法/聚合行为
依恋情结方法大量使用其他类的数据方法搬移到数据所在的类
数据泥团多个数据总是一起出现提取为对象
过度耦合类之间依赖过深引入接口(视边界)
冗余类类没有存在的意义删除

重构手法 ​

详见 重构技术专题。

手法说明
提取方法将代码块提取为独立方法
提取类将相关字段和方法提取为新类
内联方法方法体比方法名更易懂时合并回调用方
以对象取代基本值用对象包装原始类型(如 Money)
以策略取代条件算法需独立选择、替换或扩展时,用策略模式替换 if-else
以多态取代条件分支对应不同类型契约时,用多态替换 type 判断
引入参数对象将多个参数封装为对象
搬移方法将方法移到更合适的类

稳定且简单的条件分支,保留 if-else 原实现往往更直接,不必为消除分支而引入额外类与接口。

Released under the MIT License.