什么是单一职责原则?
单一职责原则的英文是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
。我们在设计类的时候,尽量避免设计大而全的类,要设计粒度小、功能单一的类,使得一个类只负责完成一个功能,这样有利于提高代码的复用性、可读性、可维护性,实现代码高内聚、低耦合。