当前位置: 首页 > 网络应用技术

依靠倒置原则:高级代码和基础代码,谁应该依靠谁?

时间:2023-03-08 12:03:30 网络应用技术

  在上一篇文章中,我们讨论了ISP原则。当我们知道在设计界面时,我们应该设计一个小界面,并且我们不应该让用户依靠无法使用的方法。

  依靠这个词,程序员理解,这意味着我使用此代码,我依靠谁。这很容易依赖,但是您是否可以做正确的事,您需要移动您的思想。它将导致很小的变化影响大面积,而依赖方向将是最典型的错误。

  那么,与之抗争的依赖方向是什么?让我们讨论依赖的设计原理:反演的原理。

  依赖性反转原理(DIP)如下所示:

  高级别的模块不应取决于低级别的模块,并且两者都应取决于抽象。

  摘要不应取决于细节,细节应取决于抽象。

  要学习这一原则,最重要的是要理解“倒置”,并了解“倒置”是什么,您必须首先了解所谓的“正常依赖关系”的样子。

  我们自然编写以下代码:

  但是,存在这种不规则结构的问题:高级别的模块取决于低级别的模块。在上述代码中,Criedic Feature类是高级别类,STEP1和Step2是低级别的模块,而STEP1和STEP1和Step2通常是特定的类。尽管这是一种自然的方式,但这篇文章确实是一个问题。

  在实际项目中,代码通常直接伴侣与特定的实现。

  也许您会问,我只是使用Kafka发送消息来创建Kafkaproducer。有什么问题吗?实际上,我们需要长时间查看它。发生了什么变化和恒定。尽管卡夫卡非常好,但它不是系统的核心部分。我们将来可能会替换它。

  您可能会认为,这是我意识到的关键组成部分,我该如何更改它?软件设计需要长期注意,长时间查看它,并且所有不在您自己控制中的事物都可以更换实际上,替换中间件经常发生。因此,这不是依赖可能改变的事物的好方法。从设计的角度来看,我们应该做什么?这是转机。

  这样被称为倒置的是扭转这种习惯方法,以便高级模块不再依赖低级模块。因此,如果我们的功能如何完成?计算机行业中的一句话告诉我们:答案:

  计算机科学中的所有问题都可以通过引入间接层来解决。

  是的,引入间接层。此间接层是指dip中的抽象。换句话说,该代码缺乏模型,并且该模型是此低级别模块在此过程中的作用。

  由于该模块扮演消息发件人的角色,因此我们可以介绍消息发送者的模型(MessageEnder):

  使用此模型,我们如何将KAFKA与此模型相结合?然后意识到Kafka的消息发送者:

  消费者可以消费这样的信息:

  这样,高级别的模块不直接依赖低级别的模块,而是依靠“反向”依赖关系来允许低级别的模块依赖于高级别的接口。这样的优点是分解高级别模块和低级别。

  如果将来需要用RabbitMQ替换Kafka,只需写一个消息架,其他部分就不需要更改。这样,我们可以保持高级别的模块相对稳定,并且不会随着低点的变化而改变 -级别代码。

  消费者可以消费这样的信息:

  摘要不应取决于细节,细节应取决于抽象。

  实际上,这可以更简单地理解:从这一点开始,我们可以得出一些更具体的编码规则:

  例如,列表语句的实际上,第一个规则在这里遵循规则:

  在实际项目中,这些编码规则有时不是绝对的。如果类特别稳定,我们也可以直接使用它,例如字符串类。因此,上面的编码规则可以成为涵盖大多数情况的规则。如果有例外,我们需要特别注意。

  作者:第一次思考和初恋