单一职责原则(Single Responsibility Principle,SRP):
是指一个类或者模块应该有且只有一个改变的原因。(高内聚,低耦合)
原则分析
一个类(或者大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且如果一个类承担的职责过多,就相当于将这些职责耦合在一起,当一个职责变化时,可能影响其他职责的运作。
实践
首先来看一下一个用户管理类UML
这个设计的问题是用户的属性和用户的行为没有分开,应该把用户的信息抽取成一个BO(Business Object, 业务对象),把行为抽取成一个Biz(Business Logic, 业务逻辑)按照这个思路对类图进行修正。
重新拆分成两个接口,IUserBO负责用户的属性,就是收集和反馈用户的属性信息;IUserBiz负责用户的行为,完成用户信息的维护和变更。
优点:
1、降低类的复杂性,类的职责清晰明确。比如数据职责和行为职责清晰明确。
2、提高类的可读性和维护性。
3、变更引起的风险减低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的类有影响,对其他接口无影响,这对系统的扩展性、维护性都有非常大的帮助。
注意:
单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否合理,但是“职责”和“变化原因”都是没有具体标准的,一个类到底要负责那些职责?这些职责怎么细化?细化后是否都要有一个接口或类?这些都需从实际的情况考虑。因项目而异,因环境而异。
建议:
接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。