【问题标题】:What is the scope of the Single Responsibility Principle? [closed]单一职责原则的范围是什么? [关闭]
【发布时间】:2019-11-15 13:09:09
【问题描述】:

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

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

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

【问题讨论】:

  • 这不是多余的吗?如果类只处理单一职责,那么其中的函数或 if 语句如何处理多个职责?
  • 在最顶层和最底层通常会有一些不同。
  • 当 SRP 由其作者在众多在线和离线发表的作品中定义和澄清时,不确定该问题如何基于意见。

标签: oop solid-principles single-responsibility-principle


【解决方案1】:

Bob Martin 曾多次尝试澄清这一点。问题是这里有两个不同的原则。非常不幸的是其中一个并没有真正的名字,这就是为什么它通常与 SRP 混为一谈。

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

这本书的那部分只是标题为“做一件事”,但它不是在谈论 SRP。 Martin 在他的下一本书中更清楚地说明了这一点。

函数应该做一件事,而且只做一件事。我们在重构时使用该原则……在最低级别。但这不是 SOLID 原则之一——它不是 SRP。 --清洁架构(第 62 页)

SRP 网上最好的解释是Martin 的blog,总结在tag wiki。在博客和他的书中,Martin(相当)一致地使用术语 module 来描述 SRP 适用的范围。模块只是一个源文件,通常只是一个类文件。

一个模块应该对一个演员负责,而且只对一个演员负责。

【讨论】:

  • Martin 最近认可了twitter thread,它解释了 SRP 如何是关于而不是事物
  • 在他的CUPID 属性中,Dan North 将做好一件事称为“Unix 哲学”。
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多