《架构整洁之道》之单一职责原则

SRP是SOLID五大设计原则中最容易理解的一个。
很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。

没错,后者的确也是一个设计原则,即确保一个函数只完成一个功能。

将大型函数重构成小函数时经常会用到这个原则,但这只是一个面向底层实现细节的设计原则,并不是SRP的全部。

历史上,我们曾经这样描述SRP这一设计原则:
任何一个软件模块都应该有且仅有一个被修改的原因。

在现实环境中,软件系统为了满足用户和所有者的要求,必然要经常做出这样那样的修改。而该系统的用户或者所有者就是该设计原则中所指的”被修改的原因”。所以,我们可以这样描述SRP:
任何一个软件模块都应该只对一个用户或系统利益相关者负责。

这里的”用户”和”系统利益相关者”用词并不完全准确,它们很有可能指的是一个或多个用户和利益相关者,只要这些人希望对系统进行的变更是相似的,就可以归为一类(一个或多个有共同需求的人)。在这里,我们将其称为行为者。
所以,对于SRP的最终描述都变成了:
任何一个软件模块都应该只对某一类行为者负责。

上述提到的”软件模块”指的是一组紧密相关的函数和数据结构。

单一职责原则主要讨论的是函数和类之间的关系-但是它在两个讨论层面上会以不同的形式出现。

在组件层面,我们可以将其称为共同闭包原则,在软件架构层面,它则是用于奠定架构边界的变更轴心。

文章目录