一.定义
单一职责原则(Single Responsibility Principle, SRP),有且仅有一个原因引起类的变更。
二.问题由来
类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。
三.实例说明
下面的类图,在IUserInfo接口中同时实现了维护用户的属性和行为的功能,那么更新一个用户的属性(userid,userName,password),或者执行用户的行为(更新密码,删除用户)都会导致类的改变,导致在用户的属性或行为变化时,UserInfo类都会改变。这就违反了我们的单一职责原则。
图1
接下来把IUserInfo接口重新拆分成两个接口,IUserBO接口负责处理用户的属性,IUserBiz接口负责处理用户的行为。这样用户的属性改变,只会导致IUserBO接口改变,用户的行为改变,只会导致IUserBiz接口改变,这样也就更符合单一职责原则。
图2
四.优点
- 降低类的复杂性,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
- 提高类的可读性,提高系统的可维护性;
- 降低变更引起的风险,变更是必然的,如果单一职责原则遵守的好,当修改一个接口的功能时,可以显著降低对其他接口功能的影响。
五.难点
单一职责原则,最难划分的就是职责,因为“职责”并没有一个量化的标准,需要从实际的项目去考虑。
在实际应用中,类的设计尽量做到只有一个原因引起变化,接口一定要做到单一职责原则,方法一定要做到单一职责原则,即一个方法只实现一个功能。
网友评论