代码纠结和凝聚力之间的区别?

时间:2012-07-10 12:58:55

标签: oop aop cohesion

关于横切关注点和面向方面的编程,您经常阅读有关代码纠缠的信息。本文1将代码纠缠为:

  

软件系统中的模块可以同时与多个要求交互。例如,开发人员通常会同时考虑业务逻辑,性能,同步,日志记录和安全性。如此众多的需求导致每个问题的实现同时存在元素,导致代码纠结。

这与低凝聚力不完全相同吗?高纠结和低凝聚力之间有什么区别,还是两个不同的词描述同样的事情?

2 个答案:

答案 0 :(得分:2)

参加维基百科:

  

如果代码是混合的,则关注点的实现是纠结   使用实现其他问题的代码。纠结的模块   发生不具有凝聚力。

凝聚力下降,如果
      - 通过其方法访问的类中嵌入的功能几乎没有共同之处       - 方法执行许多不同的活动,通常使用粗粒度或不相关的数据集。

所以..当代码纠结时,它会违反SOLID原则,如单一责任原则,开放封闭原则等。

所有这些原则通常都是一起出现的,违反一项原则/最佳做法会导致另一项原则/最佳做法。

但纠结并不一定意味着代码没有凝聚力。 例如,我们可以有一个名为SecurityChecker的类,它会对用户登录所有与身份验证相关的活动进行身份验证。 显然,这将处理多个问题,即身份验证和日志记录。那将是一个纠结的阶级。 另一方面,这两个conerns都将在同一组数据上运行,在这种情况下,这些数据可能是用户数据,登录次数,登录尝试次数等。因此,凝聚力可能仍然很高。

一般来说,大多数这些原则/指导/最佳实践从不同的角度看待同一个问题,最终目标是管理不同组件/类之间的依赖关系,以便整体设计更加可维护,高效从长远来看,这是优雅的

答案 1 :(得分:0)

非常相似的是。

Cohesion is used to indicate the degree to which a class has a single, well-focused purpose.

因此,如果你有一个专注于一个目标的课程,那么它就会因为尝试做不止一件事而没有“纠结”。