单一职责原则(SRP:Single responsibility principle)
又称单一功能原则,面向对象的基本原则之一。它规定 一个类应该只有一个发生变化的原因。
该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出。
但实际上我们很容易明白他的意思,却很难真正的理解它。
所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。
而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
如果我们有一个 DAL 类,那 DAL 类变化的原因有多少呢?
比如我搜索的时候要加一个字段,比如我删除要多删一些子记录,那么这算不算是不同的职责呢?
当然算,一个是查询,一个是删除,这不是两个截然不同的职责吗?
这是我们站在这个DAL的角度上来说,假如们站在 BLL 的角度来看呢?
那 DAL 类的职责就只有一个了,那就是负责实体的各种数据库交互了。
一个类,只有一个引起它变化的原因。应该只有一个职责。
每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。
这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。
这个时候我们说的职责,其实应该是站在类的外部,也就是调用者来看的角度。
比如我们上面举的例子,不会有人把四种数据库动作分在四个类中去写吧。
所以可以说
- 类的职责是站在外部调用的角度来看的。
- 一个类的职责应该是一组紧密相关的功能。
其实就是 一个类只负责一组相关的事情。
很多程序员都是黑就是黑,白就是白的思维。
其实呢 很多原则不是打死一定要遵守的,重点还是我们要具体情况具体分析,该让它单一的时候单一,该耦合的时候耦合。
只要最终以实用,有用为目的,就没有错误的设计。