SRP(单一责任原则)是客观的吗?


17

考虑两个想要设计“吸引用户”设计的UI设计师。“吸引用户”是一个不客观的概念,仅存在于设计师的脑海中。因此,设计师A可以选择红色,而设计师B可以选择蓝色。设计器A创建的布局与设计器B完全不同,依此类推。

我读到有关SRP(单一责任原则)的知识,我理解的是一种主观分析或对职责的分解,这些职责可能因OO设计者而异。我对吗?换句话说,是否有可能有两个优秀的面向对象的分析器和设计人员针对一个基于SRP原理的系统提出两种不同的设计?


4
我认为任何一种设计(艺术,工程等)都必须在客观性和主观性之间取得平衡-一些明确的规则和约束,一些经验和判断力,甚至一些完全自由的“一切皆有可能”彼此选择。
2011年

Answers:


12

这是一个很好的问题,我以前经常仔细考虑。

我会说不客观,不。绝对主观的。如何解决问题取决于您对这类问题的看法。科学向我们展示了有效解决同一问题的方法有很多种。科学还向我们表明,各大洲的人们可以独立提出相同的解决方案,因此某些解决方案比其他解决方案更为明显。无论如何,根据“最佳”判断解决方案取决于您的标准。

确实,一个人可能将其视为同一整体的两个部分,另一个可能将其视为两个完全独立的概念。在查看不同代码库的维护者如何解决同一问题时,人们总是会看到这一点。但是,两种解决方案都可以正常工作。

(PS。编辑此答案是因为OP的最后一个问题与问题标题相反。)


5

该原理本身是客观的,但是遵循该原理的实现方式却有很多不同的方式,以至于两个独立的开发人员几乎总是针对同一应用程序提出非常不同的系统设计。

甚至同一开发人员两次执行相同设计的可能性,仍然可能会提出至少部分不同的两种解决方案。

要使系统设计始终看起来相同的原理,就必须涵盖设计决策的各个方面。单一责任主体仅涵盖进行任何系统设计所涉及的设计决策的一小部分。


好的分析@Guffa。+1。我喜欢没有包罗万象的想法。是的,SRP仅告诉您尝试使所有问题都归于一个问题。但这并不能告诉您责任的界限在哪里。
2011年

2

该原则的应用是主观的。但是,“主观”并不等同于美学那样的“偏好”。

有明显的极端情况。用了一个方法,A级,仅有的几行代码,不调用任何其他类,是绝对继SRP。另一方面,具有两种方法的类绝对遵循SRP ,该类包含通过原始套接字的完整电子邮件实现,而另一种构建GUI形式。

美学是一个糟糕的类比。更好的类比将是众所周知的耦合内聚的计算机科学概念。这些都不是黑白的,是非。但是,即使有定性元素,也可以测量。如果您向一群经验丰富的开发人员展示针对同一功能的两个独立设计,那么他们将给出相似的读物,说明设计具有更多的耦合和/或凝聚力。

实际上,SRP本质上只是功能凝聚。它说某个模块的各个部分(例如,类)应该组合在一起,因为它们全都有助于执行相同的功能,而没有其他原因。“功能”可能需要解释-有些人可能将其字面解释为单个功能(或方法或过程)声明,其他人可能会退后一步,将功能视为“发送电子邮件”或“播放音乐” ,但仍有很大的回旋余地。 “管理资料”不是有效的功能描述。


0

客观地将“责任”定义为“改变的理由”。在编程时,所有更改的原因都在于将来,因此程序员只能根据他们的经验和领域知识来猜测。因此,分析责任是一种预测,部分是主观的。


0

SRP是客观的;实现是主观的

具有完全相同功能的两个实现可能使用完全不同的内部结构,这导致不同的类和方法,并且都可以满足SRP

如果它们使用相同的方法和状态,并且都被规范化(最小/非冗余),那么从理论上讲,它们将在SRP下以相同的类和方法结束。

但我无法证明这一点。然而。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.