我理解这种低耦合高内聚的说法有问题。我在谷歌上搜索并阅读了很多这方面的内容,但还是觉得很难理解。
我的理解是,高内聚意味着,我们应该有专门执行特定功能的类。希望这是正确的?比如信用卡验证类,它专门用于验证信用卡。
还是不明白低耦合是什么意思?
我理解这种低耦合高内聚的说法有问题。我在谷歌上搜索并阅读了很多这方面的内容,但还是觉得很难理解。
我的理解是,高内聚意味着,我们应该有专门执行特定功能的类。希望这是正确的?比如信用卡验证类,它专门用于验证信用卡。
还是不明白低耦合是什么意思?
当前回答
你有智能手机吗?有一个大的还是很多小的应用程序?一个应用程序是否会回复另一个应用程序?您可以在安装、更新和/或卸载另一个应用程序时使用一个应用程序吗?每个应用程序都是独立的,这是一种高内聚性。每个应用程序都独立于其他应用程序,这是低耦合。DevOps偏爱这种架构,因为这意味着您可以在不中断整个系统的情况下进行离散的连续部署。
其他回答
内聚性-所有事物之间的紧密联系。 耦合-所有事物如何相互连接。
让我们举个例子——我们想设计一辆自动驾驶汽车。
我们需要马达正常运转。
我们需要这辆车能自动行驶。
(1)中的所有类和函数都能很好地一起启动电机并使其运行,但不能帮助汽车转向。所以我们把这些类放在引擎控制器后面。
(2)中的所有类和函数都能很好地使汽车转向、加速和制动。它们不能帮助汽车启动或将汽油输送到活塞。所以我们把这些类放在它自己的驱动控制器后面。
这些控制器用于与所有可用的类和函数通信。控制器之间只进行通信。这意味着我不能从油门踏板类中调用活塞类中的函数来使汽车走得更快。
踏板类必须要求驱动控制器与引擎控制器对话,然后引擎控制器告诉活塞类加快速度。这使得我们程序员能够发现问题,并允许我们毫无顾虑地组合大型程序。这是因为代码都是在控制器后面工作的。
低耦合:—— 让它变得简单。 如果你改变了你的模块,它对其他模块有什么影响?
例子:- 如果您的服务API公开为JAR,对方法签名的任何更改都将破坏调用API(高/紧耦合)。
如果您的模块和其他模块通过异步消息通信。只要您获得消息,您的方法更改签名将是您模块的本地(低耦合)。
如果消息格式发生变化,则呼叫客户端将需要进行一些更改。
举个例子可能会有所帮助。想象一个生成数据并将其放入数据存储的系统,数据存储可以是磁盘上的文件,也可以是数据库。
高内聚可以通过将数据存储代码与数据生产代码分开来实现。(实际上是将磁盘存储与数据库存储分开)。
低耦合可以通过确保数据生产对数据存储没有任何不必要的了解来实现(例如,不会询问数据存储关于文件名或db连接的信息)。
简短明了的回答
高内聚性:一个类/模块中的元素应该在功能上属于一起,并做一件特定的事情。 松耦合:不同的类/模块之间应该有最小的依赖关系。
低耦合是在两个或多个模块的上下文中。如果一个模块中的变化导致其他模块中的许多变化,那么它们被称为高度耦合的。这就是基于接口的编程的用处。模块内的任何变化都不会影响其他模块,因为它们之间的接口(交互的平均值)没有改变。
高内聚性——把相似的东西放在一起。所以一个类应该有方法或行为来做相关的工作。举一个夸张的坏例子:List接口的实现不应该有与String相关的操作。String类应该有方法和与String相关的字段,类似地,List的实现应该有相应的东西。
希望这能有所帮助。