【发布时间】:2012-07-10 12:58:55
【问题描述】:
关于横切关注点和面向方面的编程,您经常阅读有关代码缠结的文章。本文1描述代码纠缠为:
软件系统中的模块可能同时与多个需求交互。例如,开发人员经常同时考虑业务逻辑、性能、同步、日志记录和安全性。如此多的需求导致每个关注点的实现中同时存在元素,从而导致代码纠结。
这和低内聚不完全一样吗?高缠结和低内聚有什么区别,还是说两个不同的词描述的是同一件事?
【问题讨论】:
关于横切关注点和面向方面的编程,您经常阅读有关代码缠结的文章。本文1描述代码纠缠为:
软件系统中的模块可能同时与多个需求交互。例如,开发人员经常同时考虑业务逻辑、性能、同步、日志记录和安全性。如此多的需求导致每个关注点的实现中同时存在元素,从而导致代码纠结。
这和低内聚不完全一样吗?高缠结和低内聚有什么区别,还是说两个不同的词描述的是同一件事?
【问题讨论】:
根据维基百科:
如果代码混合在一起,则关注点的实现是纠结 使用实现其他问题的代码。纠结的模块 发生没有凝聚力。
如果:
,凝聚力会降低
- 嵌入在类中的功能,通过其方法访问,几乎没有共同点。
- 方法执行许多不同的活动,通常使用粗粒度或不相关的数据集。
所以..当代码纠结时,它会违反单一责任原则,开放封闭原则等SOLID原则。
所有这些原则最常结合在一起,违反一项原则/最佳实践会导致另一项原则/最佳实践。
但纠结并不一定意味着代码没有凝聚力。 例如,我们可以有一个名为 SecurityChecker 的类,它对用户进行身份验证,记录所有与身份验证相关的活动。 显然,这将处理多个问题,即身份验证和日志记录。因此,这将是一个纠结的课程。 另一方面,这两个 conerns 将在同一组数据上运行,在这种情况下可能是用户数据、登录时间、登录尝试次数等。因此内聚性仍然很高。
一般来说,这些原则/指导方针/最佳实践中的大多数都是从不同的角度看待同一个问题,最终目标是管理不同组件/类等之间的依赖关系,从而使整体设计更易于维护、更高效从长远来看是优雅的。
【讨论】:
非常相似是的。
Cohesion is used to indicate the degree to which a class has a single, well-focused purpose.
因此,如果您有一个具有单一目标的班级,那么它不会因为尝试做不止一件事而“纠结”。
【讨论】: