美文网首页
如何解耦代码

如何解耦代码

作者: NeXt4 | 来源:发表于2020-12-20 17:48 被阅读0次

为什么要解耦
如果说重构是保证代码质量不至于腐化到无可救药地步的有效手段,那么利用解耦的方法对代码重构,就是保证代码不至于复杂到无法控制的有效手段。

“高内聚、松耦合”的特性可以让我们聚焦在某一模块或类中,不需要了解太多其他模块或类的代码,让我们的焦点不至于过于发散,降低了阅读和修改代码的难度。而且,因为依赖关系简单,耦合小,修改代码不至于牵一发而动全身,代码改动比较集中,引入 bug 的风险也就减少了很多。同时,“高内聚、松耦合”的代码可测试性也更加好,容易 mock 或者很少需要 mock 外部依赖的模块或者类。

如何判断代码是否解耦
把模块与模块之间、类与类之间的依赖关系画出来,根据依赖关系图的复杂性来判断是否需要解耦重构。

如果依赖关系复杂、混乱,那从代码结构上来讲,可读性和可维护性肯定不是太好,那我们就需要考虑是否可以通过解耦的方法,让依赖关系变得清晰、简单。当然,这种判断还是有比较强的主观色彩,但是可以作为一种参考和梳理依赖的手段,配合间接的衡量标准一块来使用。

如何实现解耦

  1. 封装与抽象

  2. 中间层

  3. 模块化
    合理地划分模块能有效地解耦代码,每个模块之间的耦合很小,提高代码的可读性和可维护性。
    模块化思想更加本质的东西就是分而治之。

  4. 其他设计思想和原则
    “高内聚、松耦合”是一个非常重要的设计思想,能够有效提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。

  • 单一职责原则
  • 基于接口而非实现编程
  • 依赖注入
  • 多用组合少用继承
  • 迪米特法则

迪米特法则的英文翻译是:Law of Demeter,缩写是 LOD。
单从这个名字上来看,我们完全猜不出这个原则讲的是什么。不过,它还有另外一个更加达意的名字,叫作最小知识原则,英文翻译为:The Least Knowledge Principle。
关于这个设计原则,我们先来看一下它最原汁原味的英文定义:

Each unit should have only limited knowledge about other units: only units “closely” related to the current unit. Or: Each unit should only talk to its friends; Don’t talk to strangers.

翻译过来就是:
每个模块(unit)只应该了解那些与它关系密切的模块(units: only units “closely” related to the current unit)的有限知识(knowledge)。或者说,每个模块只和自己的朋友“说话”(talk),不和陌生人“说话”(talk)。

不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口(也就是定义中的“有限知识”)。

  1. 一些常用的解耦的手段
    Spring AOP,实现业务代码与非业务代码的解耦
    IoC, 实现对象使用者与对象创建者解耦
    Spring中的事件监听机制
    消息队列,实现了观察者和被观察者的解耦

《极客时间 - 设计模式之美》

相关文章

  • 如何解耦代码

    为什么要解耦如果说重构是保证代码质量不至于腐化到无可救药地步的有效手段,那么利用解耦的方法对代码重构,就是保证代码...

  • 如何解耦?

    高内聚,低耦合。控制代码复杂度! 封装与抽象隐藏实现的复杂性隔离实现的易变性给依赖的模块提供稳定且易用的抽象接口 ...

  • 解耦解的早,改需求没烦恼

    摘要 世上本没有解耦,需求改的多了也便有了解耦。 —— 产品经理 本例将通过一个计时控件,聊聊如何解耦~ 本Tim...

  • 2022-05-01代码重构 -- 大小规模重构

    大规模高层次重构 解耦代码 “解耦”为何如此重要? 过于复杂的代码往往在可读性、可维护性上都不友好。解耦保证代码松...

  • 需求如何解耦(一)

    一、解耦的定义 解耦就是把系统功能和逻辑拆分。 为什么拆分。一个不解耦的系统就像把若干根线缠绕到一起,你想抽出任何...

  • 解耦

    解耦 对于大型重构, 最有效的手段就是 解耦, 解耦的目的使实现代码高聚合、松耦合。 解耦为何如此...

  • 设计模式

    设计模式要干的事情就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的...

  • 桥接模式

    一、桥接模式 解耦图解 示例代码

  • 为什么工厂模式可以解耦?why?

    1、聊聊解耦? 耦合:代码之间的关联关系称为耦合,具有强关联关系的称为强耦合。 解耦:解除代码之间的关联关系,使每...

  • 1、MVC模式和MVT模式

    解耦 1.解耦:不同的代码块之间降低耦合2.向后兼容:代码更新迭代3.增强代码的可扩展性和可移植性,以提高向后兼容...

网友评论

      本文标题:如何解耦代码

      本文链接:https://www.haomeiwen.com/subject/vbuknktx.html