ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

依赖倒置原则(DIP)

2022-09-10 08:32:58  阅读:195  来源: 互联网

标签:依赖 接口 Server HTTPServer 模块 EchoServer 服务器 倒置 DIP


依赖倒置原则(DIP)

SOLID 原则系列,第 5 部分

Photo by 艾尔莎·冈萨雷斯 on 不飞溅

什么是 DIP?

依赖倒置原则是所有 SOLID 原则中最令人困惑的定义之一。维基百科相对用户友好的定义指出:

高级模块不应该从低级模块导入任何东西。两者都应该依赖于抽象(例如,接口)。

抽象不应该依赖于细节。细节(具体实现)应该依赖于抽象。

什么是高级模块与低级模块?为什么他们使用通用术语“抽象”来指代接口?究竟什么才是细节?

服务器示例

一个例子将有助于说明。想象一个服务器,它的工作是接收某种请求并返回某种响应。

有时,它会像 Echo Server 一样,接收请求并在响应中“回显”相同的确切文本。

Echo Server Implementation

其他时候,它就像一个 HTTP 服务器。您可以请求对资源执行某些操作(例如,获取电子书、在 Instagram 上发布、删除您的帖子),它会为您执行此操作,然后您会收到回复。

HTTP Server Implementation

高级与低级

服务器调用 HTTPServer 或 EchoServer 来确定要执行哪种类型的服务器实现。该图显示了程序结构。

服务器是高级模块的一个线索是它代表“服务器”的总类,而其他类代表该类别中的类型。它首先出现在调用堆栈中的事实提供了另一个线索。

HTTPServer 和 EchoServer 是低级模块,因为它们处理不同类型服务器如何工作的“细节”。

依赖方向

目前,高级模块(服务器)依赖于低级实现细节(HTTPServer 和 EchoServer)。它知道它们是什么以及需要如何调用它们。

这是一种形式 耦合 ,当发生变化时会导致困难。较低级别的细节比较高级别的抽象更有可能发生变化。如果(以及何时)HTTPServer 或 EchoServer 发生变化,它可能会影响服务器并意味着您需要做更多的工作。

反转依赖

为了反转依赖关系,您可以创建一个接口(即“抽象”)来隐藏服务器的实现细节。

现在,Server 依赖于 Application 接口。 HTTPServer 和 EchoServer 也都依赖于相同的接口。 Server、HTTPServer 和 EchoServer 都同意定义它们相互交互方式的“合同”。请注意,此图中的依赖关系箭头指向彼此。

服务器只需要知道应用程序接口。它可以接收实现该接口的任何类型的服务器(Echo、HTTP、CatPicture 等)。每种类型的服务器实现的功能以及如何实现的详细信息对高级服务器隐藏。

回顾

反转依赖关系减少了耦合,这使得设计在面对变化时更加健壮。当您使用接口隐藏实现细节时,更改不会那么痛苦,因为它不会冒泡到程序的高级部分。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/24388/17321008

标签:依赖,接口,Server,HTTPServer,模块,EchoServer,服务器,倒置,DIP
来源: https://www.cnblogs.com/amboke/p/16675946.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有