内聚是一个模块内的元素聚合在一起的程度。
肯特贝壳用一句话描述好的设计:把不相关的东西进一步拉开,把相关的东西更紧密地放在一起。
我们需要更小的、更容易理解的、更容易测试的、独立的部分来构建系统。
代码的主要目标是把想法传递给他人。我们写代码是为了尽可能清晰和简单地表达想法。使代码具有可读性,是一种职业责任,也是管理复杂性重要的指导原则之一。
内聚力是与上下文更加相关的。一个有效的工具是领域驱动开发,让我们的思维和设计能够由问题域来引导。
关注点分离指导编程:一个类,一件事。一个方法,一件事。
耦合是A改了,B必须改。内聚是A改了,B可以改,并且带来新的价值。内聚中包含着耦合。
如果你不得不在代码库的许多地方进行更改来完成一次变更,那么这就不是一个非常内聚的系统。内聚力是功能相关性的一种度量标准。
可测试性可以帮助提高解决方案的内聚力。使用关注点分离,从本质复杂性中分离偶然复杂性。只保留本质复杂性的系统,是高内聚的。关注点分离帮助在模块化和内聚力之间取得平衡。
内聚力差,代码和系统不灵活,难以测试。内聚力有最佳点。如果你读了一段代码,不知道它是在干什么,那可能就是内聚力差。
团队自己做决定的能力,无需征得团队之外的许可,就是团队这个人类系统的内聚力。团队的信息和技能是有内聚力的,因为团队在其范围内拥有做出决策和取得进展所需要的一切。
简单放在一起,只是“代码团伙”,是结构凌乱的。能够独立自主、高效、可测试、可读地完成一个目标的一组代码才是有内聚力的“代码团队”。