美文网首页
迪米特法则——“高内聚、松耦合”思想的实现

迪米特法则——“高内聚、松耦合”思想的实现

作者: 兮兮码字的地方 | 来源:发表于2020-01-28 15:27 被阅读0次

    基础概念——“高内聚、松耦合”

    “高内聚、松耦合”是一个非常重要的通用的设计思想,以有效提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。“高内聚”用来指导类本身的设计,“松耦合”用来指导类与类之间依赖关系的设计。

    所谓高内聚,就是指相近的功能应该放到同一个类中,不相近的功能不要放到同一类中。相近的功能往往会被同时修改,放到同一个类中,修改会比较集中。

    所谓松耦合指的是,在代码中,类与类之间的依赖关系简单清晰。即使两个类有依赖关系,一个类的代码改动也不会或者很少导致依赖类的代码改动。

    下图中,左边部分的代码结构是“高内聚、松耦合”;右边部分正好相反,是“低内聚、紧耦合”。

    很多设计原则都以实现代码的“高内聚、松耦合”为目的,比如单一职责原则、接口隔离原则、基于接口而非实现编程等。此外,还有非常重要的——迪米特法则。

    迪米特法则

    Law of Demeter,缩写是 LOD

    翻译成中文:

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

    如何理解“迪米特法则”?

    不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。

    迪米特法则是希望减少类之间的耦合,让类越独立越好。每个类都应该少了解系统的其他部分。一旦发生变化,需要了解这一变化的类就会比较少。

    相关概念比较:

    “高内聚、松耦合”“单一职责原则”“接口隔离原则”“基于接口而非实现编程”“迪米特法则”,它们之间的区别和联系。

    区别:

    高内聚、松耦合:是一个重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围.

    单一职责原则:提供的功能上要单一.

    接口隔离原则:与外部关系上只依赖需要的抽象.

    基于接口而非实现编程:是一条比较抽象、泛化的设计思想,为了提高代码的灵活性/扩展性/可维护性.

    迪米特法则:每个单元只该依赖与它关系密切的单元,最少知道,只与关系密切的单一交互.

    联系:

    职责越单一越容易做到接口隔离,也越容易做到最少知道的迪米特法则.

    基于抽象编程抽象的知识越顶层越脱离具体实现,相对知道的内容就越少,也容易实现迪米特法则.

    接口隔离原则与迪米特法则都强调只依赖需要的部分,接口隔离原则是相对偏上层来说的,迪米特法则是相对偏具体实现来说的.

    单一职责原则/接口隔离原则/基于接口而非实现编程/迪米特法则都以实现代码的"高内聚、松耦合"为目的,提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围,降低风险.

    总结:

    这些原则的目的都是实现“高内聚低耦合”,但是出发的角度不一样,单一职责是从自身提供的功能出发,迪米特法则是从关系出发,针对接口而非实现编程是使用者的角度,殊途同归。

    相关文章

      网友评论

          本文标题:迪米特法则——“高内聚、松耦合”思想的实现

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