Appearance
单一职责原则(Single Responsibility Principle, SRP)
单一职责原则(Single Responsibility Principle, SRP) 由软件工程大师 Robert C. Martin 在 2000 年出版的经典著作《敏捷软件开发:原则、模式与实践》中首次系统化提出。
其核心定义为:“There should never be more than one reason for a class to change. 一个类应该有且仅有一个引起它变化的原因。”即,一个类(或模块、函数)应该只负责一项明确的职责。
SRP 是 SOLID 五大设计原则中的第一个(S),也是面向对象设计的基石。Robert C. Martin 强调,职责的“单一性”并非指代码行数少,而是功能目标的唯一性。有人会极端的认为“一个类只能有一个方法”就是 SRP。其实一个类可以有多个方法,但这些方法必须围绕同一个功能目标展开。
该原则的提出是为了解决以下问题:
- 代码臃肿:一个类承担过多功能,导致代码难以理解和维护。
- 修改风险:修改某一功能时,可能意外破坏其他无关逻辑。
实践技巧
- 专注单一目标 :每个代码单元(类、方法)应像“瑞士军刀中的单个工具”一样,只解决一个问题。
- 拒绝上帝类 :避免让一个类成为“万能管理器”(如 UserManager 同时处理验证、存储、日志、通知等)。
- 类名是否清晰描述单一功能?
- 单个类超过 300 行(视语言而定)可能隐含多个职责
- 若修改某个功能时频繁改动同一类,说明职责未分离
- 一个类的方法被不同团队修改(如 OrderService 被支付团队和物流团队共同维护)
- 单元测试难以编写(因依赖过多外部服务)
- 代码复用困难(如想复用验证逻辑但被迫引入数据库依赖)