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

9

我工作中的另一名工程师今天问我关于“这个单一职责是什么?”我的回答如下:

“你代码的每个范围,无论是if语句、函数、类还是模块,都应该只有一个改变的原因。”

但是我读到的每一个地方,人们都是在类的上下文中谈论这个。告诉他SRP适用于他代码中的每个范围是否不正确?


3
这不是多余的吗?如果类只处理单一职责,那么它内部的函数或if语句如何处理多个职责呢? - that other guy
通常情况下,在最高层和最底层通常会有一些不同。 - Ray Tayek
4
不确定问题如何具有主观性,因为SRP已经被其作者在许多出版的作品中进行了定义和澄清,包括线上和线下的内容。 - jaco0646
1个回答

5
Bob Martin尝试在多个场合澄清这个问题。问题在于这里有两个不同的原则;而且非常不幸的是其中一个没有真正的名字,这就是为什么它通常与SRP混淆的原因。

函数应该只做一件事情。他们应该做好这件事。他们只应该这样做。--《代码整洁之道》(第35页)

该书中的这一部分简单地命名为“只做一件事”,但它并不是在讨论SRP。马丁在他的下一本书中进一步明确了这一点。

一个函数应该只做一件事情。我们在重构时使用这个原则......在最低层次。但这不是SOLID原则之一——它不是SRP。--《代码整洁架构》(第62页)

SRP的最佳在线解释是Martin的博客, 在标签wiki中有概述。在博客和他的书中,Martin一直(相当)一致地使用术语模块来描述SRP适用的范围。一个模块只是一个源文件,通常只是一个类文件。

一个模块应该对一个且仅一个角色负责。


2
马丁最近认可了一篇推特帖子,该帖子解释了SRP关注的是“人”而不是“事物”。 - jaco0646
2
在他的CUPID属性中,Dan North提到将一件事情做好,就像“Unix哲学”一样。 - jaco0646

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接