单一职责原则和关注点分离之间有什么区别?
单一职责原则和关注点分离之间有什么区别?
单一职责原则和关注点分离其实是同一件事情。
确实,你可以被学术讨论牵扯进去,试图在两者之间找出某种差异,但为什么呢?就所有的目的而言,它们描述的是同一个东西。最大的问题是人们太过于追求要知道"关注点"和"职责"到底是什么,以至于他们可能会错过SRP和SoC背后的重要思想。
这个思想就是将代码库分成松散耦合、隔离的部分。这样允许多个开发人员在不影响彼此的情况下工作,也允许单个开发人员修改一个隔离的部分而不破坏另一个部分。
这应用于模块级别,例如MVC是促进SRP和SoC的架构模式。代码库被拆分成隔离的模型、视图和控制器。这样,可以独立地修改视图,而不影响模型。这两者之间没有可怕的纠缠。
在更低层次上,这也应该应用于类。将几十个方法放在一个类中,不如将代码拆分成几个部分。出于同样的原因。
同时,即使在方法级别上,也要将大型方法拆分成较小的方法。
原则上,SRP是一种原则,而不是一条规则,所以你不必(也不能/不应该)过分地遵循它。这并不意味着要走得太远,并且每个类只有一个七行的方法,例如。它只是意味着将代码拆分成隔离的部分的一般原则。重点是这会导致更好的代码库和更稳定的软件。
摘自链接文章:
关注点分离 (SoC) - 是将计算机程序分解成尽可能重叠功能少的不同特性的过程。关注点是程序中任何感兴趣或关注的部分。通常,关注点与功能或行为同义。
http://en.wikipedia.org/wiki/Separation_of_concerns单一职责原则 (SRP) - 每个对象都应该有一个单一的职责,并且其所有服务都应该与该职责密切对齐。在某种程度上,内聚力被认为是 SRP 的同义词。
http://en.wikipedia.org/wiki/Single_responsibility_principle在我看来,单一职责原则是实现关注点分离的工具之一。
单一职责原则指对象应负责一个单一工作单位。
关注分离原则指应用程序应分成模块,其功能尽可能少地重叠。
目的类似...应用略有不同。
关注点分离(SoC)。将应用程序划分为具有尽可能少重叠功能的不同特性。
“关注点” = “独立特性” = “独立部分”
“关注点”在高级和低级别都起作用
单一职责原则指出每个模块或类应该对软件提供的一个功能的一部分负责,并且该职责应完全封装在类中。所有服务都应与该职责紧密对齐。(维基百科定义)
“职责”=“变更原因” 变更什么?“软件提供的一个功能的一部分”=基本单元
结论:
单一职责原则适用于基本单元->适用于低级别
关注点分离在高级和低级别都适用
SRP和SoC共同实现关注点的分离。它们在低级别完全相同
关注点分离 (Separation of Concerns) 是一个过程;单一职责原则 (Single Responsibility Principle) 是一种设计/架构哲学。它们并不完全独立,但是它们的用途不同。
我试图比较关注点分离(SoC)和单一职责原则(SRP)之间的差异。
差异
SRP是在类级别上,但SoC是在每个计算机程序、抽象层面或有时是架构层面上的。
SRP是关于将您的域划分为具有一个责任(一个变化的原因)的凝聚类的质量(如何而不是什么)。另一方面,SoC是将上下文分成不同部分的设计原则,以便每个部分都处理一个单独的问题(是什么而不是如何),因为有许多工具(例如类、函数、模块、包等)可用于达到不同层次的目标。
SRP的概念基于内聚性(高内聚性),而SoC接近模块化、分而治之(D&C)等各种抽象级别。
SoC是应对复杂性的良好设计原则,例如抽象,而要实现单一职责类,可以使用SoC原则作为一个很好的解决方案。如果您可以从该类中提取另一个责任(关注点),则知道该类具有多个责任。
相似之处