Design patterns 什么时候提高程序内聚性会恶化耦合?

Design patterns 什么时候提高程序内聚性会恶化耦合?,design-patterns,design-principles,coupling,cohesion,Design Patterns,Design Principles,Coupling,Cohesion,我最近参加了一次关于设计原则和模式的考试,考试中的一个问题如下:“举个例子,有时提高程序内聚性可能会恶化耦合。” 据我所知,内聚性是指一个类/模块如何专注于解决它创建时要解决的问题,或者更好地说,它在完成it工作方面有多出色。它做了不该做的工作吗?然后将该零件移动到其他类/模块 耦合是许多类/模块之间的依赖级别。这意味着,无论我们是否对不同的模块/类进行重大更改,一个好的类/模块都会起作用 我曾经向自己解释这一点的一种方式是这样一个例子: 调酒师的工作是煮咖啡和其他饮料。一个好的调酒师应该做他的

我最近参加了一次关于设计原则和模式的考试,考试中的一个问题如下:“举个例子,有时提高程序内聚性可能会恶化耦合。”

据我所知,内聚性是指一个类/模块如何专注于解决它创建时要解决的问题,或者更好地说,它在完成it工作方面有多出色。它做了不该做的工作吗?然后将该零件移动到其他类/模块

耦合是许多类/模块之间的依赖级别。这意味着,无论我们是否对不同的模块/类进行重大更改,一个好的类/模块都会起作用

我曾经向自己解释这一点的一种方式是这样一个例子: 调酒师的工作是煮咖啡和其他饮料。一个好的调酒师应该做他的工作,那就是煮咖啡,这会增加他的凝聚力,但是如果他开始拖地板和服务顾客,他就脱离了他的工作,从而失去了凝聚力。一个好的调酒师也不应该受到其他员工的影响,这意味着他的耦合度很低。换句话说,如果清洁女工某天早上不上班,他的工作应该不会受到影响

因此,如果我的理解是正确的,这意味着增加凝聚力不应该对耦合产生负面影响,就像告诉酒保更多地关注咖啡不会让他更依赖清洁女工一样


我错过什么了吗?我对内聚/耦合的理解是否有缺陷?抱歉读了这么久

如果酒吧的工作人员很有凝聚力,他们就知道彼此的工作,并且可以作为一个团队更有效地工作。例如,鸡尾酒女服务员可能知道酒保喜欢在哪里拿回脏盘子(洗碗机附近的酒吧部分),因此女服务员会在那里放下空杯子。或者,经理可能会注意到调酒师的冰块越来越少,而不需要被要求就到房子的后面去拿更多的冰块并重新加满

当然,通过相互了解工作,员工之间的关系现在更加紧密了。这可能意味着过程中的任何变化都会影响更多的人,并造成培训问题。例如,如果酒吧决定从立方冰改为碎冰,经理必须被告知,否则他可能会得到错误的冰。如果团队是松散耦合的,那么只有调酒师需要知道


从这个例子中,你可以看到一个非常有凝聚力的团队需要了解彼此的工作,这使得改变任何一份工作都很困难。这与软件中紧密耦合的模块造成的可维护性问题相对应。它很方便,并且可以让模块更紧密地协同工作,但如果情况发生变化,就会产生问题。

实际上很有意义!谢谢你的回复(:这个答案中的类比说明了耦合,但与内聚无关。内聚一词的两个用法都应该替换为耦合,因为这就是所描述的。这可能是我在stackoverflow上读到的一个问题的最佳描述之一。太好了!!我怀疑考试是基于一个特定的课程,因此这个问题有一个特定于该课程的答案。