“依赖倒置”和“接口设计”是相同的原则吗?

2024-03-19

“依赖倒置原则”(DIP)和“接口设计原则”是否表达了相同的原则?如果不是,会有什么区别?

EDIT

为了澄清并缩小上下文范围:我所说的接口是指编程接口,例如 Javainterface或 C++ 中的纯抽象基类。不涉及其他“合同”。


我只是想参与并引用德里克·格里尔的话另一个与此非常相似的问题 https://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important,因为在我看来,它确实很好地回答了这个问题。

“依赖倒置原则没有指的是通过使用接口(例如,接口)抽象依赖关系的简单实践。MyService → [ILogger ⇐ Logger])."

虽然这将组件与依赖项的特定实现细节解耦,但它并没有颠倒消费者和依赖项之间的关系(例如,[MyService → IMyServiceLogger] ⇐ Logger)."

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“依赖倒置”和“接口设计”是相同的原则吗? 的相关文章

  • UML 只能用于面向对象吗?

    目前 在我的论文期间 存在着关于 UML 是否仅用于 OO 开发 的激烈争论 我从一些来源进行了搜索 其中给出了很多关于它的论点 就我自己而言 我相信并非所有 UML 图都是专门为 OO 系统 软件开发而制作的 即 状态图 因此 我希望得到
  • 如何设计/规划Web应用程序开发?

    我有兴趣学习如何在多个开发团队场景中设计 规划 Web 应用程序开发 担任 项目经理 主管 的角色 成功的 Web 应用程序开发需要哪些 文档 需要哪些 UML 图以及需要到什么程度 在设计 计划阶段 是否需要根据用例对每个类进行图表化 类
  • 如何访问带有美元符号的 PHP 对象属性?

    我有一个 PHP 对象 其属性中有一个美元 符号 如何访问该属性的内容 例子 echo object gt variable Ok echo object gt variable WithDollar Syntax error With 变
  • 动态重新定义 PHP 类函数?

    我试图弄清楚如何动态导入大量 PHP 类函数 例如 class Entity public function construct type require once type functions php person new Entity
  • 为什么/何时应该使用泛型方法?

    学习Java的时候遇到过通用方法 public
  • PHP:我是否将事件驱动编程与信号感知接口(信号和槽/观察者模式)混淆了?

    我看到很多人说 Symfony2 Zend Framework 2 等都是事件驱动的 在桌面世界中 通过事件驱动编程 我了解到应用程序每当其状态发生变化时都会通知其观察者 由于 PHP 应用程序是无状态的 因此无法执行此类操作 IE 让观察
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • 依赖注入容器——工厂模式

    我一直在尝试了解依赖注入 并一直在阅读并尝试编写一个类似于以下内容的小型依赖注入容器 http fabien potencier org article 12 do you need a dependency injection conta
  • VB.NET 与 C# 中的属性实现多级继承

    假设我有 2 个接口 如下定义 public interface ISkuItem public string SKU get set public interface ICartItem ISkuItem public int Quant
  • 在 Python 中使用类作为命名空间是个好主意吗

    我正在将一堆相关的东西放入一个类中 主要目的是将它们组织到命名空间中 class Direction north 0 east 1 south 2 west 3 staticmethod def turn right d return tu
  • 面向对象设计的良好参考[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么Boost在“程序选项”中使用全局函数覆盖来实现自定义验证器

    这个例子 http www boost org doc libs 1 55 0 doc html program options howto html idp163429032显示一个名为validate在全局范围内定义重载函数boost
  • 为什么必须使用“out”而不是ref?

    我写了一些关于 ref out 声明的代码块 我认为 ref 最有用 好的 为什么我需要用完 我每次都可以使用always ref namespace out ref class Program static void Main strin
  • 避免内存泄漏

    所以我正在学习 C 中的 OOP 我认为编写自己的字符串类是一个很好的实践 当然是为了学习目的 我提出了一个我不知道如何解决的问题 这是一些和平的代码 class String char str public String char con
  • 为什么Perl的SUPER调用不使用箭头方法?

    我注意到 当您调用超类的方法时 您需要执行以下操作 my self class gt SUPER new 为什么不是这样 my self class gt SUPER gt new 我怀疑是因为 class gt SUPER gt new
  • python编写的类爬虫抛出属性错误

    用 python 编写一些代码后 我陷入了深深的麻烦 我是按照 Python 中的 OOP 设计编写代码的新手 我在代码中使用的 xpath 是完美的 当通过 page crawler 类的实例运行 info grabber 类中的 pas
  • 全局常量是反模式吗?

    我一直认为仅仅为了保持常量而创建一个类是一个糟糕的设计 但最近 我尝试用谷歌搜索它 发现只有一个界面作为常量是不好的反模式 没有提到使用一类常量 我认为 由于常量类实际上与全局变量没有太大区别 这就是我反对它并倾向于重构此类类的原因 它创建
  • 为什么Java不支持C中的clrscr这样的函数?

    我有一个问题 对很多人来说可能听起来很愚蠢 但我不能停下来把它发布在这里 因为在互联网上找不到任何东西 为什么java没有我们在C中使用的clrscr之类的函数 如果我创建了一个基于用户输入反复迭代的 java 控制台应用程序 然后如果我想
  • 如何使用 php __toString

    有什么用途 toString in PHP 例如 我有一个函数 例如 在一个名为 person 的类中 public function construct id name this gt id id this gt name name an
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参

随机推荐

  • QSlider 和按键事件

    我目前有一个 QSlider 可以使用鼠标滚动图像数据帧 我希望能够使用箭头键滚动单个步骤 一帧 这是我当前的 sliderMoved 代码 def sliderMoved self val retrieves the data array
  • 子对象的 MVC 模型绑定命名约定?

    当存在子属性时 我在默认模型绑定命名约定方面遇到问题 例如 我有一个 ViewModel 看起来像这样 public class UserViewModel public User BusinessObject get set 我的 Use
  • 应该避免在 C/C++ 中使用递归调用吗?

    是否应该避免在 C C 中使用函数的递归调用 我从事机器学习 数据挖掘工作 因此使我的代码具有可扩展性对我来说非常重要 当我使用Java时 我尽可能避免使用递归调用 因为我经常会导致调用堆栈溢出 尽管有一些选项可以控制分配给调用堆栈的内存量
  • 连接到生产者时出错:错误:ssl.certificate.location 失败

    环境信息 操作系统 例如Mac Arch Windows 10 Windows10 节点版本 例如8 2 1 10 4 1 NPM 版本 例如5 4 2 6 4 1 节点 rdkafka版本 例如2 3 3 2 5 1 重现步骤 节点 rd
  • 我可以在 Rails 中有一个名为“Transaction”的模型吗?

    我们希望有一个名为 Transaction 的模型 它与 Rails 中数据库的 交易 表相对应 但这会与现有的 ActiveRecord 交易功能发生冲突 除了为事务模型起一个不同的名称 我不想这样做 之外 我还能做些什么来支持该模型吗
  • 具有多种类型的列表

    在C 中 有没有办法创建一个list拥有多种类型 我的列表项可以是int string DateTime or char 我知道使用List or ArrayList但由于封装的原因 这些都不是好的做法 有没有一个好的方法来实现这一目标 我
  • 在 Oracle 存储过程中搜索文本

    我需要使用 TOAD 搜索 Oracle 数据库中的所有存储过程 我正在寻找开发人员在序列上使用 MAX 1 而不是 NEXTVAL 来获取下一个 ID 号的任何地方 我从事 SQL Server 工作已经很多年了 知道有几种方法可以做到这
  • 无法从 Windows 服务连接到 WCF 服务

    我有一个 WCF 服务托管在远程计算机上 在我的本地计算机上 我有一个 WPF 应用程序和一个 Windows 服务 我希望能够连接到 WCF 服务 WPF 应用程序可以正常连接和通信 但由于某种原因 Windows 服务无法连接 它们的
  • 如何在 Spring Data JPA 中禁用乐观锁定

    乐观锁注释不起作用 OptimisticLocking type OptimisticLockType NONE public class TestEntity and Lock注释也不起作用 public interface TestRe
  • Spring MVC 控制器的运行时加载和动态映射请求/URL

    我们正在使用 Spring MVC 启动一个新项目 并且我们希望摆脱注释驱动的请求 url 映射 我们希望实现以下用例 用例A 用户输入 URL 请求映射处理程序检索映射列表 例如 从数据库 并基于此动态映射列表 它调用相关控制器 这是因为
  • 使用从 Activity 传递的数据更新 Fragment UI

    我的要求 My MainActivity从其他应用程序接收数据 MainActivity被列为shareable 现在 我需要将此数据传递给fragment in MainActivity并更新fragment s textview In
  • 在 Objective-C 中检查布尔值数组并查看是否至少有一个为 YES

    我有一个可变的布尔值数组 我想检查是否有任何值是 是 目前 我正在与这个数组一起创建另一个数组 它总是像这样全是假的 MyArray addObject NSNumber numberWithBool switchInput MyAllNo
  • React Native:文本节点的“自动”宽度

    我在视图中有一个文本元素
  • 使用 Xcode 6 (iOS 8 SDK) 构建项目会导致 iPad 上的横向旋转渲染问题

    我们有一个项目 在使用 Xcode 5 1 1 iOS sdk 7 2 构建时表现符合预期 但在使用 Xcode 6 2 iOS sdk 8 2 构建时 iPad 上出现旋转渲染问题 在 iPad 上 我们的应用程序仅支持横向左和横向右 当
  • 从字符串中删除子字符串

    如何从字符串中删除由变量传递的子字符串for和其他循环 需要延迟扩展 我找到了一个 echo off setlocal enableExtensions enableDelayedExpansion cd D dp0 set br rem
  • Twitter API 发生变化?推文用户列表停止工作

    我有以下代码 用于显示选定用户的推文列表 今天 它停止在此处显示用户列表的推文 并显示来自任何用户推文的推文 其中包含我在参数中设置的查询 Twitter API 是否有我不知道的更新 jQuery function tweet tweet
  • 如何在 PHP 中返回正则表达式匹配,而不是替换

    我试图在 HTML 文本块中提取图像的第一个 src 属性 如下所示 Lorem ipsum img src http example com img jpg consequat 创建正则表达式来匹配 src 属性没有问题 但是我该如何re
  • 如何解决sql server性能问题

    好吧 这个普遍问题在过去 6 个月里已经出现了两次 不同的存储过程 我们的内部用户报告了应用程序中的超时错误 我们可以在受控环境中重现应用程序中的问题 因此 我们使用 sp who2 执行检查阻塞的正常步骤 一切看起来都很好 没有阻塞 因此
  • 如何通过twitter的Fabric API获取用户数据(Android)

    我已经成功地将twitter的fabric api集成到我的项目中 推特登录按钮
  • “依赖倒置”和“接口设计”是相同的原则吗?

    依赖倒置原则 DIP 和 接口设计原则 是否表达了相同的原则 如果不是 会有什么区别 EDIT 为了澄清并缩小上下文范围 我所说的接口是指编程接口 例如 Javainterface或 C 中的纯抽象基类 不涉及其他 合同 我只是想参与并引用