什么是高内聚,低耦合

最近因为要学习springboot,又去看了一遍spring,在这里简单的再复习一下其中的核心思想。

如果觉得内容繁琐,可以直接看结论哦!

# 什么是低耦合?

        我们先来说低耦合,因为这个比较广为人知,低耦合是针对于各个模块之间的,我们在实现一个项目时,会把各种功能分开实现,封装成为一个一个模块,从而降低他们之间的耦合性,耦合就是类似于齿轮,我们熟知,一个一个的齿轮协同工作,虽然看起来非常完美,但一旦其中一个出现问题,就需要停掉所有服务,重新修理,这对维护和升级来说都是非常痛苦的一件事。所以,我们倡导尽可能降低耦合,注意,耦合是不可能被完全消除的,只能尽可能减低,并且,降低模块间的依赖也有助于进行单元测试。在程序中,耦合也分为很多种:

        (1)内容耦合。当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另 一个模块时,这样的耦合被称为内容耦合。内容耦合是最高程度的耦合,应该避免使用之。

        (2)公共耦合。两个或两个以上的模块共同引用一个全局数据项,这种耦合被称为公共耦合。在具有大 量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是十分困难的。

        (3) 外部耦合 。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传 递该全局变量的信息,则称之为外部耦合。

        (4) 控制耦合 。一个模块通过接口向另一个模块传递一个控制信号,接受信号的模块根据信号值而进 行适当的动作,这种耦合被称为控制耦合。

        (5)标记耦合 。若一个模块 A 通过接口向两个模块 B 和 C 传递一个公共参数,那么称模块 B 和 C 之间 存在一个标记耦合。

        (6) 数据耦合。模块之间通过参数来传递数据,那么被称为数据耦合。数据耦合是最低的一种耦合形 式,系统中一般都存在这种类型的耦合,因为为了完成一些有意义的功能,往往需要将某些模块的输出数据作为另 一些模块的输入数据。

        (7) 非直接耦合 。两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实 现的。

        总结:列举了这么多耦合,我们应该优先选择降低哪种耦合呢?在程序中,如果模块间必须 存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,尽量避免使用内容耦合。我们可能对其中的一些耦合,不太了解,这很正常,因为本人在最初学习时也对这些不以为然,但所有的程序写多了都会回到性能和规范,一个流行的代码,一定是有优秀的编程思想,清晰的逻辑,以及严格的代码规范,希望大家多加思考,不仅仅局限于代码的完成,更重视代码的设计,这是高级程序员和普通的区别。

# 什么是高内聚?

        再来介绍高内聚,很多人对低耦合比较了解,但对高内聚却没有很多的了解,这是因为你再实现低耦合的过程中,其实无意中已经实现了高内聚,但我们还是要对其有了解,高内聚,故名思意,极高的内部聚合,这个内聚是针对于类的成员方法,模块间的耦合已经降低了,但对于模块内部呢?也就是一个一个的类中呢?我们应该尽可能的减少一个成员方法所能做的事情,尽可能使它只做一件事。这对我们寻找程序的问题和升级一个功能来说也是很有利的,我们不需要再去一个方法中的功能,而是直接添加或者修改一个方法,不需要去担心参数的问题。

        再来说一下,为什么说在实现低耦合的过程中,无意间已经实现了高内聚,当你将耦合降到最低时,其实也代表,你的 模块划分的足够细,对应的参数的传递也已经划分到了清晰可见。这就基本实现了高内聚的要求,一个方法尽可能的只实现一个功能。

        总结:我们在设计程序时,尽可能的降低依赖,高内聚也就基本实现了。

  • 20
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值