单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。这个原则的英文描述是这样的:A class or module should have a single responsibility。如果我们把它翻译成中文,那就是:一个类或者模块只负责完成一个职责(或者功能)。
设计你的系统,使得每个模块负责(响应)只满足一个业务功能需求。
Design your systems such that each module is responsible (responds to) the needs of just that one business function. (Robert C. Martin)
评价一个类的职责是否足够单一,我们并没有一个非常明确的、可以量化的标准。 可以说,这是件非常主观、仁者见仁智者见智的事情。
实际上,在真正的软件开发中,我们也没必要过于未雨绸缪,过度设计。 所以,我们可以**先写一个粗粒度的类,满足业务需求。
随着业务的发展,如果粗粒度的类越来越庞大,代码越来越多,这个时候, 我们就可以将这个粗粒度的类,拆分成几个更细粒度的类。这就是所谓的持续重构(后面的章节中我们会讲到)**。
如何判断类的职责是否足够单一?
不同的应用场景、不同阶段的需求背景、不同的业务层面,对同一个类的职责是否单一,可能会有不同的判定结果。 实际上,一些侧面的判断指标更具有指导意义和可执行性,比如,出现下面这些情况就有可能说明这类的设计不满足单一职责原则:
-
类中的代码行数、函数或者属性过多;
-
类依赖的其他类过多,或者依赖类的其他类过多;
-
私有方法过多;比较难给类起一个合适的名字;
-
类中大量的方法都是集中操作类中的某几个属性。