单一职责原则
单一职责原则,又称Single responsibility principle,SRP。
望文生义的理解
一个模块只干一件事。
“一个模块只干一件事”的确是重要的软件设计思想,但它其实是“高内聚、低耦合”的通俗解释,是从模块自身考虑怎么去组合的设计思想。
将变化纳入考量
Robert Martin 在《敏捷软件开发:原则、实践与模式》中,对单一职责原则的定义:
就一个类而言,应该仅有一个引起它变化的原因。
职责是什么?
在SRP中,我们把职责定义为“变化的原因”。如果你能想到多于一个动机去改变一个类,那么这个类就具有多于一个的职责。
为什么要分离职责?
软件设计是一门关注长期变化的学问,一个模块最理想的状态是不改变,其次是少改变,它可以成为一个模块设计好坏的衡量标准。
每一个职责都是变化的一个轴线。当需求变化时,该变化会反应为类的职责的变化。如果一个类承担了多于一个的职责,那么引起它变化的原因就有多个。
如果一个类承担的职责过多,就等于把这些职责耦合在了一起。一个职责的变化可能会削弱或抑制类完成其他职责的能力。
将变化的来源纳入考量
Robert Martin 在《架构整洁之道》中重新定义了单一职责原则:
任何一个软件模块,都应该只对某一类行为者负责。