1.介绍

内聚和耦合是设计模块化软件系统的常见概念。由拉里·康斯坦丁在20世纪60年代末开发,它们已经被证明是从软件设计到软件度量的基础领域。它们后来成为标准术语。

在本教程中,我们将学习内聚和耦合以及它们如何相互关联。

2.凝聚力

内聚性是模块内的元素属于一起的程度。一个模块可以是一个类,一个包,甚至是一个微服务。简单地说,它的意思是“一起改变的代码保持在一起”。

具有高内聚性的模块包含彼此紧密相关并在其目的上统一的元素。例如,a用户类应该表示用户行为。

如果包含不相关的元素,则据说模块具有低凝聚力。例如,一个用户类包含如何验证电子邮件地址的方法。用户类可以负责存储用户的电子邮件地址,但不负责验证它或发送电子邮件:

它应该属于其他类电子邮件

正如您所看到的,内聚的概念与单一责任原则(SRP,其中之一)密切相关坚实的原则)哪个阶级只有一个责任。SRP后面的模块可能具有高凝聚力。

2.1.高黏聚力优势

具有单一的、定义良好的目的的模块是易于理解,可读性更强.此类模块的名称明显宣布其目的,此类模块仅为此。它有助于读者构建关于模块在不读取模块中的每一行的情况下进行的直觉。金宝搏官网188be此外,读取这些模块的代码时没有惊喜。

例如,如果用户类包含用于验证电子邮件地址的代码。

更改代码更容易由于所有相关代码都在模块中。例如,如果开发人员必须对用户行为进行更改,则可以跳转到用户类并在一个类中进行所有更改。这将保持影响范围有限。相比之下,在设计中,用户行为分散在多个类中,每个类都必须更改才能实现所需的更改。

测试代码更容易.由于这种模块不依赖于其他模块以实现其目的,因此它们易于单位测试。此外,当它们仅限于单个模块时,很容易构建和部署更改。

对此类模块的更改不太容易发生错误。当您正在进行模块时更容易犯错误。

最后,它们是可重用的。由于这些模块执行单一职责,因此它们往往在需要的地方使用。

总的来说,高度凝聚力的模块反映了更好的软件设计质量。因此,在模块中寻找与主要目的不直接相关的元素。将它们移到更适合的其他模块中,或者创建一个新的模块。

耦合

耦合是软件模块之间的相互依赖程度。一个模块可以是一个类,一个包,甚至是一个微服务。实际上,耦合是关于改变一件事如何需要改变另一件事。金宝搏官网188be

如果两个模块连接紧密,则为高耦合(或紧耦合)。例如,两个具体的类存储彼此的引用并调用彼此的方法。如下图所示,客户订单是紧密耦合的。的客户存储客户放置的所有订单的列表,而订单将引用存储到客户对象。

每次客户汇总新订单时,我们都需要将其添加到当前的订单列表中客户.这似乎是一种不必要的依赖。同时,订单只需要知道客户标识符,并且需要引用客户对象。我们可以通过以下更改使这两个类松散耦合:

其中低耦合的模块大都是相互独立工作的。

3.1.低耦合的优点

松散耦合的模块更容易开发和维护。由于它们是相互独立的,我们可以并行开发和测试它们。此外,它们可以在不影响彼此的情况下进行修改和更新。我们可以独立地构建和部署这些模块,大大减少了部署时间。

紧密耦合的模块很难更改。开发人员需要了解多个模块以及它们之间的关系。他们需要始终如一地对所有模块进行更改。这使得它更容易出错。此外,我们需要构建、测试和部署每个更改的模块,进一步增加开发工作。

紧密耦合的模块也很难测试。对单个模块进行单元测试非常困难,因为它严重依赖于其他模块。为了能够对模块进行独立的单元测试,必须花费大量的精力来模拟对其他模块的调用。

集成测试也很难设置。总体而言,测试是脆弱的,因为任何一个模块中的更改都可能破坏测试。调试这样的模块也很复杂,因为它需要运行所有依赖的模块。

紧密耦合的模块不太可能重复使用。这样的模块并没有对自己的任何有用的东西执行任何东西。因此,它很少适合别人重用的目的。同样将其拉到依赖性是困难的,因为它带来了其他依赖模块。

整体的松散耦合反映了更高的软件设计质量。因此,我们的目标应该是设计尽可能独立的模块。

4.凝聚力与耦合

凝聚力和耦合彼此相关。每个都可以影响另一个水平。

高内聚与松散耦合相关。如果一个模块的元素彼此紧密相关,并且只服务于一个目的,那么它就会较少地相互作用,并且依赖于其他模块。因此,将与其他模块松散耦合。

类似地,紧密耦合可能是低内聚的标志。由于元素分散在两个模块上,模块之间可能会严重依赖于彼此。因此,其内聚力较低。

以下是内聚和耦合的快速比较表:

5.结论

在本教程中,我们研究了凝聚力和耦合以及它们如何相互关联。

评论在本文上关闭!