单一职责原则

单一职责原则(Single Responsibility Principle)规定,每一个模块/类都应该只负责实现某一个单一的功能,该功能应该应该由这个类完全封装起来。也就是说一个类只做一件事。对于功能/职责的解释,Robert Cecil Martin(单一职责原则的提出者)指出,可以理解为“改变的原因”。一个类或者模块应该有且只有一个改变的原因。这样,当需要修改某一个功能的时候,不会影响另一个功能的实现。例如,当你的汽车的电子车窗出现了问题,开去修理厂修理,当你去取车的时候,发现车窗修好了,然而引擎坏掉了。当不同的功能耦合在同一个类中时,在需要修改某一功能的时候,就有可能会出现这样的情况。

职责划分的精细程度也会影响到单一职责原则的执行。因此,我们需要做到的是尽可能得将相近的/会为了相同原因发生改变的功能放在一起,尽可能得将不同的/会为了不同的原因发生改变的功能分离开来。

Gather together the things that change for the same reasons. Separate those things that change for different reasons.

这其实是关于如何定义完整性(cohesion)和耦合性(coupling)。我们希望能够提高那些会为了相同原因发生改变的功能之间的完整性,降低那些会为了不同的原因发生改变的功能之间的耦合性。

We want to increase the cohesion between things that change for the same reasons, and we want to decrease the coupling between those things that change for different reasons.

然而,在思考单一职责原则时,要谨记,最终是“人”提出的改变,而不同的人关注的功能是不同的(由他们的职责决定)。因此,我们不希望把这些代码混在一起,让所有人都迷惑不解,包括你自己。

最后谈一谈单一职责原则的优势:

  • 降低了类的复杂度(负责多项职责的逻辑会更复杂)
  • 提高系统的可维护性
  • 变更引起的风险降低(当修改一个功能时,可以降低对其他功能的影响)

你可能感兴趣的:(单一职责原则)