什么是高内聚、低耦合?

2017-04-26 19:40:37 +08:00
 superPershing

能不能给出一些具体的示例来说明一下。网上很多都是长篇大论,却一行代码也没有。

3016 次点击
所在节点    问与答
9 条回复
csunny
2017-04-26 20:25:13 +08:00
感觉这个看示例再多,可能也不如实际工作中碰到体会深刻。
v1024
2017-04-26 20:37:29 +08:00
简单来说,高内聚=一个组件相关的东西都在一个目录里,低耦合=组件依赖尽量少
abcbuzhiming
2017-04-26 22:56:13 +08:00
IOS 的软件就属于典型的高内聚,低耦合,依赖的东西,都装在软件包里,对外没依赖,缺点就是软件体积贼大。反例就是 windows 程序, dll 运行库,彼此高度依赖
why1
2017-04-26 23:54:04 +08:00
cxh116
2017-04-27 08:12:48 +08:00
你的代码能够很方面的写单元测试,就表示已经实现了 高内聚、低耦合
mazyi
2017-04-27 08:36:59 +08:00
@abcbuzhiming 不是把库包含进软件包就是内聚,也不是不依赖外部就是耦合。
blacklee
2017-04-27 08:43:57 +08:00
好了开始上课了。
但是只有例子没有代码。例子是大家都很熟悉的爬虫。

高耦合的代码:只有一个模块,以及一种类型的 task。
这个模块拿到 task,开始下载网页(比如 V2EX 的首页)——解析网页——拿到帖子列表数据

低耦合的代码:多个模块,多种类型的 task (就是子任务)。
拿到抽象 task,生成下载网页的 task,交给下载模块。
下载模块下载完毕,生成解析网页的 task,交给存储模块。
存储模块拿到数据,自己决定怎么搞。
abcbuzhiming
2017-04-27 08:53:20 +08:00
@mazyi 我知道啊,说着玩玩罢了,只不过要形象的解释,那这例子比一般你给人解释,不要依赖具体实现,要面向接口啥的要现实多了,当然实际解释起来也挺麻烦的
thekll
2017-04-27 18:29:58 +08:00
我的理解:高内聚就是内部功能组件尽可能的小和单一,同时避免暴漏不必要的接口;高耦合即尽可能的抽象外部接口,使接口服务和内部实现无关。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/357559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX