2

我现在正在进一步介绍 java 类,这是该类简要定义的方式:

内聚力:以高内聚力为目标,在这种情况下内聚力意味着单个模块紧密地专注于其任务。

耦合:以低耦合为目标,在这种情况下,耦合意味着两个或多个模块相互交织的程度。

如何确定内聚和耦合的水平?

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

4

3 回答 3

4

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

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

也就是说,我们期望更大的单元具有更大的内聚性和解耦性:类需要比方法更有内聚性和更不紧密耦合,例如,因为假设您的类大小合理,您可以更轻松地来回切换当您阅读和维护代码时,方法之间比类之间更重要。

于 2017-01-26T07:41:07.607 回答
1

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

因此,“确定”内聚/耦合水平的方法是实现一个测量相应指标的工具。(或者找到执行此操作的现有工具。例如,声纳。)

如何确定内聚和/或耦合水平的阈值?

我假设您的意思是……您如何决定何时将代码库中各个指标的值称为“不可接受”。

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

于 2017-01-26T07:39:36.767 回答
1

我可能错了,但这只是我的谦虚输入。

内聚经常与耦合一起被提及,但它们具有相反的关系。高内聚 == 低耦合。

让我引用你

以高凝聚力为目标,在这种情况下,凝聚力意味着单个模块紧密地专注于其任务。

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

耦合是指两个模块相互依赖的程度,越少越好,因为它促进了维护,以及可重用性等。很多时候,低耦合是通过使用事件来实现的,我们有事件发射器和事件消费者,并且他们不必互相了解任何事情。甚至发射器也只是触发后忘记,当系统将事件传递给消费者时,消费者将接受这些事件。

于 2017-01-26T07:42:25.303 回答