什么是单一职责原则?
单一职责原则的英文是 Single Responsibility Principle, 简称 SRP. 其原始英文描述是:
A class or module should have a single responsibility.
一个类或者模块应当只负责完成一个功能 (或职责).
举个栗子:
在社交产品中, 需设计一个 UserInfo 类来记录用户心信息:
- public class UserInfo{
- private long userId;
- private String userName;
- private String email;
- private String telephone;
- private long createTime;
- private long lastLoginTime;
- private String provinceOfAddress; // 省
- private String cityOfAddress; // 市
- private String regionOfAddress; // 区
- private String detailedAddress; // 详细地址
- //... 其他属性
- }
在上述这个代码样例里, UserInfo 类中包含的均为和用户相关的属性, 比较满足 SRP 原则. 但有很多和地址信息相关的属性, 其实可以考虑拆分为 UserAddress 类, 后续在扩展如电商物流等模块功能时, 能更好的与 UserInfo 解耦.
单一职责的好处
单一职责原则, 通过设计粒度小, 功能单一的类, 避免了将不相关的功能耦合在一起, 提高了类的内聚性. 同时, 类依赖和被依赖的其他类也变少了, 减少了代码的耦合性.
但不可过多拆分类, 如果拆分过细, 反而会降低内聚性, 影响代码的可维护性.
如何判断类职责是否单一?
这里没有一个具体的金科玉律, 但从实际代码开发经验上, 有一些可执行性的侧面判断指标, 可供参考:
类中的代码行数, 函数, 或者属性过多;
类依赖的其他类过多
私有方法过多
类中大量的方法都是集中操作类中的几个属性
比较难给类起一个合适的名字
回顾一下
单一职责原则的英文是 Single Responsibility Principle, 简称 SRP. 我们在设计类的时候, 尽量避免设计大而全的类, 要设计粒度小, 功能单一的类, 使得一个类只负责完成一个功能, 这样有利于提高代码的复用性, 可读性, 可维护性, 实现代码高内聚, 低耦合.
来源: https://www.cnblogs.com/CocoML/p/12817337.html