内聚和耦合 - 如何确定阈值?

时间:2017-01-26 07:31:04

标签: java coupling cohesion

我现在正在进一步介绍java课程,这就是课程简要定义的方法:

凝聚力:瞄准高凝聚力,在这种情况下凝聚力意味着单个模块紧紧关注其任务。

耦合:针对低耦合,在这种情况下,耦合意味着两个或多个模块交织在一起的程度。

如何确定凝聚力和耦合水平?

例如,我的一些方法调用同一类中的其他方法。这意味着调用其他方法的方法依赖于其他方法,以便"调用"完成其代码块的方法。这是否意味着我对同一类的方法具有低内聚和高耦合?或者这些概念更多地涉及不同的类和不同的包?

3 个答案:

答案 0 :(得分:4)

内聚和解耦在各个层面都很重要:每行代码都应具有特定的含义和目的,每个方法都应具有特定的含义和目的,每个类应具有特定的含义和目的,每个包都应具有特定的含义和目的。意义和目的,每个代码库都应该具有特定的含义和目的。

这并不意味着一个方法不应该调用另一个方法,一个类不应该使用另一个类等;相反,它意味着理想情况下,您应该能够阅读和理解方法,而无需阅读其调用的所有其他方法,阅读和理解类而无需阅读其使用的所有其他类,等等。

也就是说,我们希望更大的单元具有更强的内聚力和解耦性:类比需要更加紧密,并且比方法更紧密耦合,例如,因为假设你的类是合理的大小,你可以更容易地去当你阅读和维护代码时,方法之间来回而不是类之间。

答案 1 :(得分:1)

有内聚/耦合的指标;见https://softwareengineering.stackexchange.com/questions/151004/are-there-metrics-for-cohesion-and-coupling

因此,“确定”内聚/耦合水平的方法是实施一种衡量各自指标的工具。 (或者找到一个可以执行此操作的现有工具。例如,Sonar。)

  

如何确定阈值的内聚和/或耦合程度?

我认为你的意思是......你如何决定何时在你的代码库中调用相应指标的值“不可接受”。

基本上,由您决定。我会通过查看工具报告“坏”值的示例来做到这一点,并确定我认为它有多糟糕。或者,坚持使用您正在使用的工具中的默认阈值。

答案 2 :(得分:1)

我可能错了,但这只是我的拙见。

通常会提到凝聚力以及耦合,但它们具有反比关系。高内聚= =低耦合。

让我引用你的话

  

瞄准高凝聚力,在这种情况下凝聚力意味着单一   模块紧紧围绕其任务。

所以它只是意味着那样。只做一件事而且做得好的东西。例如,将实体保存到数据库的方法应该只关注如何将该实体保存到数据库,它不应该担心该实体的正确性(所有实体实例属性都通过所有数据库模式验证,在这种情况下,这个验证应该由拦截器来处理。

耦合是指2个模块相互依赖的程度,越少越好,因为它促进了维护和可重用性等。通常,通过使用事件实现低耦合,我们有事件发射器和事件消费者,他们不必彼此了解任何事情。即使发射器只是即发即弃,消费者也会在系统向其发送事件时接收事件。