luv*_*ere 34

单一责任原则(SRP) - 给每个班级提供一个改变的理由; 和"改变的理由"=="责任".例如:Invoice类没有责任自行打印.

关注的分离(自1974年以来).关注==系统的特点.照顾每一个问题:对于每一个问题,其他问题都是无关紧要的.隐藏行为的实施.

这里开始.

  • 原则上相同,但 SoC 本身似乎并不能阻止过度分离。过度分离并不像过度耦合那么糟糕,但它也很糟糕,因为它增加了构建和维护软件的成本(与过度耦合相同的问题 - 不同的原因)。SoC 需要两个非常重要的成功因素,至少对于 Bob 叔叔来说是这样的:(1) “关注点”首先是业务层面的(而不是技术层面的);(2) 将属于在一起的事物分开是错误的。https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html (4认同)

Mat*_*ves 16

关注与单一责任原则的分离(SoC与SRP)

来自链接的文章:

关注点分离(SoC) - 是将计算机程序分解为尽可能少地在功能上重叠的不同功能的过程.关注点是程序中的任何兴趣或焦点.通常,顾虑与特征或行为是同义词. http://en.wikipedia.org/wiki/Separation_of_concerns

单一责任原则(SRP) - 每个对象都应该承担一项责任,并且其所有服务应该与该责任密切相关.在某种程度上,Cohesion被认为是SRP的同义词. http://en.wikipedia.org/wiki/Single_responsibility_principle

  • 根据这些定义,哪个级别的凝聚力被认为是单一责任原则的同义词?我搜索到有很多凝聚力水平(从低到高):重合,逻辑,时间,程序和功能......在这个解释中它是否意味着只有"功能凝聚力"? (4认同)

Jus*_*ner 12

单一责任声明对象负责单个工作单元.

关注分离指出应用程序应分成功能性尽可能少的模块.

类似的最终结果......略有不同的应用.


Bos*_*gan 11

在我看来,单一责任原则是实现关注点分离的工具/习语之一.

  • 但对于具有多重责任但仍坚持关注分离原则的对象进行成像要困难得多.换句话说,为了实现真正的关注点分离(在所有层面上),可以更好地遵守单一责任原则 (5认同)
  • 什么?人们可以轻松创建一个具有非重叠功能(SRP)的应用程序,该功能包含许多非独立关注对象(!SOC). (3认同)

Wey*_*ani 9

单一责任原则和关注点分离实际上是一回事.

当然,你可以陷入学术讨论中,试图梳理出两者之间的某种差异,但为什么呢?出于所有意图和目的,他们描述了同样的事情.最大的问题是人们如此想知道究竟什么是"关注"和"责任",他们可能会错过SRP和SoC背后的重要思想.

这个想法只是将您的代码库分成松散耦合的孤立部分.这允许多个开发人员在不影响彼此的情况下处理不同的部分,它还允许单个开发人员修改一个孤立的部分而不会破坏另一个部分.

这适用于模块级,例如MVC是一种促进SRP和SoC的架构模式.代码库分为独立模型,视图和控制器.这样,视图的修改可以独立于模型完成.两个不是可怕的交织在一起.

在较低级别,这也应该应用于类.而不是将几十个方法放在一个类中,而是将代码分成几个.出于同样的原因.

即使在方法级别,也可以将大型方法拆分为更小的方法.

原则上.SRP是一个原则,而不是一个规则,所以你不必(读:不能/不应该)将它虔诚地追随到极致.这并不意味着走得太远,例如每个类只有一个七行方法.它只是意味着将代码拆分为孤立部分的一般原则.关键是它会带来更好的代码库和更稳定的软件.


jac*_*646 9

由于之前的答案都没有引用创建单一职责原则的罗伯特·马丁,我认为这里需要一个更权威的答案。

Martin 对 SRP 的灵感来自 David Parnas、Edsger Dijkstra(他创造了“关注分离”一词)和 Larry Constantine(他创造了“耦合”和“内聚”一词)。Martin 将他们的想法整合到 SRP 中。

单一职责原则的另一种措辞是:

将因相同原因而发生变化的事物聚集在一起。将那些因不同原因而改变的事物分开。

如果您考虑一下,您会意识到这只是定义内聚和耦合的另一种方式。我们希望增加因相同原因而发生变化的事物之间的内聚力,并希望减少因不同原因而发生变化的事物之间的耦合。

然而,当你考虑这个原则时,请记住改变的原因是。是人们要求改变。并且您不想通过将许多不同的人出于不同原因而关心的代码混合在一起来混淆这些人或您自己。

对于最初的问题,SRP 和 SoC 之间的细微差别在于 Martin 将术语“关注点”提炼为指代


小智 7

关注点分离(SoC).将您的应用程序划分为不同的功能,尽可能少地重叠功能.(微软).

"关注"="不同特征"="不同部分"

"关注"在高层和低层均有效

单一责任原则  规定每个模块或类应对软件提供的功能的单个部分负责,并且该责任应完全由类封装.其所有服务应与该责任严格一致.(维基百科定义)

"责任"="改变的理由" 改变了什么?"软件提供的功能的一部分"= 基本单元

结论

  • 单一责任原则适用于基本单位 - >低水平工作

  • 关注点分离在高层和低层都有效

  • SRP和SoC协同工作以分离关注点.它们
    在低级别上完全相同