凝聚力与单一责任

时间:2019-02-06 20:18:04

标签: oop solid-principles single-responsibility-principle software-quality cohesion

我已经开始研究诸如凝聚力之类的概念和诸如单一责任原则之类的原理。我对他们之间的差异感到非常困惑。

网络上有很多信息,但是我发现很难筛选出正确的比较结果。

凝聚力和单一责任之间有什么关系? 一个班级可能只负责一个责任而凝聚力低吗?

2 个答案:

答案 0 :(得分:1)

可以将凝聚力视为一种软件质量指标,而SRP则更多地是一种主观软件质量原则。正如Pragmatic Programmers所描述的那样,内聚代码是在属于彼此并相互依赖的事物在一起时发生的。

例如,如果一个类的实例变量或属性仅由其方法及其方法使用全部,但是这些方法也不使用任何外部数据或其他对象的方法,则该类为据说具有很高的凝聚力。但是,如果该类正巧正在从文件中读取和写入,则该类可以视为遵守单一职责原则,因为读取和写入可以看作是两个非常不同的任务。无论如何,您还可以看到该类的主要任务是“使用文件系统执行IO操作”,因此SRP在某种程度上可以接受解释,具体取决于所应用的上下文。

答案 1 :(得分:0)

此概念在Wikipedia herehere中进行了简要介绍。

一个责任仍然是一个抽象的概念。如果要负责创建报告,则这是一项任务,但仍是一项包含多个步骤和数据部分的任务。因此,在班级中存在一些低凝聚力发生的空间。只是进行计算(如果简单)会带来更多的“原子”和高凝聚力。

如果您认为SRP具有更改类的单一原因,那么我认为也有帮助。