单一责任原则的范围是什么?

gtb*_*ono 5 oop single-responsibility-principle solid-principles

今天我工作的另一位工程师问我“这是什么责任?” 我的回答如下:

“您的代码的每个范围,无论是if语句,函数,类还是模块,都应该有一个更改的理由”。

但是,在我读到的所有这篇文章中,人们都是在课堂上谈论的。我告诉他SRP适用于他的代码中的每个范围,我错了吗?

jac*_*646 5

鲍勃·马丁曾多次试图澄清这一问题。问题是这里有两个不同的原则;非常不幸的是,其中一个并没有真正的名字,这就是为什么它通常与 SRP 混为一谈。

\n\n
\n

函数应该做一件事。他们应该做得很好。他们只应该这样做。--干净的代码(第35页)

\n
\n\n

这本书的这一部分的标题很简单,“做一件事”,但它并没有讨论SRP。马丁在他的下一本书中更加清楚地阐述了这一点。

\n\n
\n

一个函数应该做一件事,而且只能做一件事。当我们在最低级别进行重构时,我们会使用该原则。但这不是 SOLID 原则之一\xe2\x80\x93,它不是 SRP。--干净的架构(第62页)

\n
\n\n

SRP 最好的在线解释是 Martin 的博客,它在标签 wiki中进行了总结。在博客和他的书中,Martin 在使用术语模块来描述 SRP 应用范围方面(相当)一致。模块只是一个源文件,通常只意味着一个类文件。

\n\n
\n

一个模块应该对一个且仅一个参与者负责。

\n
\n

  • Martin 最近认可了一个 [twitter 帖子](https://twitter.com/macerub/status/1371147795873288199),该帖子解释了 SRP 是如何关注“人”而不是“物”的。 (2认同)
  • Dan North 在他的 [CUPID](https://www.youtube.com/watch?v=knNaUSLhx-U) 文章中将做好一件事称为“Unix 哲学”。 (2认同)