2009-11-12 108 views
47

单一责任原则与分离关注分别有何区别?单一责任原则与分离担忧的区别

+1

这一定是一个骗局。搜索每一个并阅读答案。他们非常联系,经常一起讨论。 – 2009-11-12 18:49:05

+0

我没有看到任何蠢事 - 你有没有想过?如果你能找到一个,我很乐意投票结束。 – 2009-11-12 18:50:55

+1

我似乎无法找到它,但我想在几个月前回答了类似的问题。一些好的答案正在进入,没有人似乎在找到愚蠢的东西,所以也许我只是疯了。 – 2009-11-12 18:53:29

回答

23

单一职责原则(SRP) - 给每个班只有一个理由 变化;和“改变的原因”== “责任”。在例如:发票 类没有责任 打印自己。

分离问题(自1974年起)。 关注==系统的功能。服用 关心每一个关注点:对于每个 一个关注点,其他关注点是 无关紧要。隐藏实施 行为。

here

12

Separation of Concern vs Single Responsibility Principle (SoC vs SRP)

从链接的文章:

分离关注(SoC)的的 - 是断裂的计算机程序到可在功能尽可能少重叠的不同特征的过程。一个问题是关于程序中的任何兴趣或焦点。通常情况下,担心与特征或行为是同义的。 http://en.wikipedia.org/wiki/Separation_of_concerns

单一职责原则(SRP) - 每个对象都应该有一个责任,那它的所有服务应与责任狭隘地对齐。在某种程度上,凝聚力被认为是SRP的同义词。 http://en.wikipedia.org/wiki/Single_responsibility_principle

+3

与这些定义,其中水平凝聚力被认为是单一责任原则的同义词?我搜索了有很多凝聚力水平(从低到高):重合,逻辑,时间,程序和功能......在这个解释中它是否意味着只有“功能凝聚力”? – limonik 2015-09-02 17:54:32

9

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

问题的分离意味着应用程序应该被拆分为功能重叠尽可能少的模块。

类似的最终结果...稍有不同的应用程序。

+0

对象和模块有什么区别?对我来说,一个模块是一个类,一个对象是一个类或者一个类的实例 – Rookian 2009-11-12 19:03:48

+0

一个模块可以是一个应用程序中的一个类似功能块......由多个类之间的交互组成(每个类具有单一责任如果您遵循单一责任模式)。 – 2009-11-12 19:13:49

9

在我看来,单一责任原则是实现问题分离的工具/成语之一。

+3

什么?人们可以很容易地创建一个具有非重叠功能(SRP)的应用程序,该应用程序包含许多非独立顾虑(!SOC)的对象。 – 2009-11-12 18:51:11

+3

但要成像一个具有多重责任但仍然遵守关注点分离原则的对象是困难的。换言之,要实现真正的问题分离(在所有级别上),最好遵守单一职责原则 – BostonLogan 2009-11-12 18:58:26

2

分离关注是一个过程;单一责任原则是一种设计/建筑理念。它们并不完全脱节,但它们有不同的用途。

2

类似但是:SoC涉及到关注点:为了将复杂问题分解成几个问题,SRP只有一个责任。

5

单一责任原则与问题分离真的是一回事。

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

这个想法很简单,就是把你的代码分割成松散耦合的隔离部分。这允许多个开发人员在不影响对方的情况下工作在不同的部分,还允许单个开发人员修改一个隔离部分而不会破坏另一部分。

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

在较低的水平上,这也应该适用于类。不要将几十种方法放在一个类中,而是将代码拆分为几个。出于同样的原因。

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

原则上。 SRP是一个原则,而不是一个规则,所以你不必(看过:不能/不应该)虔诚地遵循它的极端。例如,这并不意味着每个课程只有一个七线方法。这仅仅意味着将代码拆分成孤立部分的一般原则。关键是它会导致更好的代码库和更稳定的软件。

2

SRP和SOC工作在不同的抽象层次上。目的是在两种情况下减少耦合并增强内聚力。虽然SRP更多地处理对象级别,但SOC也可能在功能级别上实现。一个函数可以由一个对象实现,但也可以由多个对象实现。因此,两种原则的耦合和凝聚力可能不同。

5

问题分离(SoC)。将您的应用程序划分为不同的功能,尽可能少的功能重叠。 (微软)。

“关注” =“特色鲜明” =“不同部分”

“值得关注”的作品在高和低的水平

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

“责任”=“改变原因”改变什么? “由软件提供的功能单一零件” = 基本单元

结论

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

  • 分离的担忧在高和低的水平上都有效

  • SRP和SoC一起工作分离关注的问题。他们是
    完全一样处于较低水平

+0

SRP也适用于不同级别,您在图书馆级别具有更普遍的责任性,在课程级别更具一般性责任性,功能级别。 – Phil1970 2016-12-15 20:57:06

1

我想提请关注(SoC)的分离和单一职责原则(SRP)之间的比较。

差异

  • 的SRP是在类层次,但SOC处于每个计算机程序的,抽象...或有时架构层。

  • SRP是关于如何将您的域划分为只有一个责任(改变原因之一)的粘性类的质量。另一方面,SoC是将上下文分隔为不同部分的设计原则,因此每个部分都需要解决一个单独的问题(不是如何),因为有很多工具(例如类,函数,模块,包等)。 ..)达到这个目标不同的水平。

  • SRP的概念是基于凝聚力(高凝聚力),而SoC接近分子,分而治之(D & C),...在每个抽象层次上。

  • SoC是应对复杂性的一个很好的设计原则,比如抽象,而为了达到单个负责任的类,您可以使用SoC原则作为一个很好的解决方案。因为,知道一个班级有多个责任的方法是,如果你能从这个班级中提取另一个责任(关注)。

相似

  • 每个应用这些原则后,你的背景下变得更加可重复使用,维护,健壮,可读性,...。