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

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(使用前将#替换为@)

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

  • 多重继承争论 II:根据 Stroustrup 的说法 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我非常了解关于为什么接口继承优于多重继承的传统争论 这里已经有一篇文章 C 应该有多重继承吗 https stackoverflow com q
  • 接口中的构造方法

    接口中的构造方法不好吗 为什么人们认为有人想要实例化接口 我们想要做的是强制实现者实现构造函数 就像其他接口方法一样 接口就像一个合同 假设我有一个接口 Queue 并且我想确保实现者创建一个带有一个参数的构造函数 该构造函数创建一个单例队
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • 使用超类初始化器初始化类

    我有两个类 一个是另一个的子类 比如说Animal and Dog 超类有一些初始化器 比如initAnimal 子类有一些初始化器 比如initDog 问题是 从编译器的角度来看 做类似的事情是完全合法的Dog adog Dog allo
  • PHP 中的抽象类是什么?

    PHP 中的抽象类是什么 如何使用 抽象类是至少包含一个抽象方法的类 该方法中没有任何实际代码 只有名称和参数 并且已被标记为 抽象 这样做的目的是提供一种模板来继承并强制继承类实现抽象方法 因此 抽象类是介于常规类和纯接口之间的东西 此外
  • PHP 相当于朋友或内部

    php 中是否有相当于 朋友 或 内部 的东西 如果没有 是否有任何模式可以遵循来实现这种行为 Edit 抱歉 但标准 Php 不是我想要的 我正在寻找类似于马戏团长所做的事情 我有一些类在后端进行 C 风格的系统调用 并且杂耍已经开始变得
  • PHP:调用另一个类的方法

    我仍在学习 OOP 所以这甚至可能是不可能的 尽管如果是这样我会感到惊讶 我需要一些帮助来调用另一个类方法 例如在ClassA I有这个方法 function getName return this gt name 现在从ClassB 不同
  • OOP Javascript - 是否需要“获取属性”方法?

    给定一个非常简单的 js 对象构造函数及其原型 function MyTest name this name name MyTest prototype getName function var myName this name retur
  • 通俗地说,Ruby on Rails ORM 是什么?请解释

    我无法理解 Ruby on Rails 中的 ORM 据我了解 表 列和对象 属性之间存在 1 1 的关系 所以每条记录都是一个对象 另外 模型到底是什么 我知道它映射到一张桌子 我真正追求的是对上述内容有更深入的理解 预先感谢您的帮助 我
  • UML 只能用于面向对象吗?

    目前 在我的论文期间 存在着关于 UML 是否仅用于 OO 开发 的激烈争论 我从一些来源进行了搜索 其中给出了很多关于它的论点 就我自己而言 我相信并非所有 UML 图都是专门为 OO 系统 软件开发而制作的 即 状态图 因此 我希望得到
  • 如何访问带有美元符号的 PHP 对象属性?

    我有一个 PHP 对象 其属性中有一个美元 符号 如何访问该属性的内容 例子 echo object gt variable Ok echo object gt variable WithDollar Syntax error With 变
  • 具有默认参数的Python类构造函数[重复]

    这个问题在这里已经有答案了 可能的重复 Python 中的 最不令人惊讶 可变默认参数 https stackoverflow com questions 1132941 least astonishment in python the m
  • 如果您不在 Java 中进行克隆,那么您会做什么以及如何称呼它?

    有没有人对 Java 中的复制构造函数 工厂方法等有任何建议或已建立的最佳实践和命名约定 特别是 假设我有一堂课Thing我想要一个返回新值的方法Thing与 a 具有相同的值Thing传入 如果是实例方法 则作为实例 您会将其作为构造函数
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • Python函数重载

    我知道 Python 不支持方法重载 但我遇到了一个问题 我似乎无法以一种很好的 Pythonic 方式解决它 我正在制作一个游戏 其中一个角色需要射击各种子弹 但是如何编写不同的函数来创建这些子弹 例如 假设我有一个函数 可以创建一颗以给
  • 信息隐藏和封装有什么区别?

    两者有什么区别信息隐藏 and 封装 我读到封装意味着将数据和对它们进行操作的过程捆绑在一起 如果是这样 下面的类是否实现了封装 class IsThisEncapsulation public int age public int get
  • 阶级等级制度中频繁的贬低总是邪恶的吗?

    据我所知 如果在类层次结构中频繁使用向下转型是没有好处的 我同意这一点 但是这条规则有哪些例外情况 如果有的话 这就是我的图形编辑器设计的薄弱之处 我有两个层次结构 其中几何图形层次结构与图形基元分离 像这样 public class Ge
  • Python:如何“杀死”类实例/对象?

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

    我遇到了一个值类型正在实现 ref 的场景 类型 只是想知道这怎么可能 幕后发生了什么 结构体是值类型 接口是引用 类型但结构可以实现接口而不会出现任何错误 有什么想法吗 提前致谢 实际上 它同时以两种不同的方式进行 首先 任何值类型都可以
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换

随机推荐

  • 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 中的纯抽象基类 不涉及其他 合同 我只是想参与并引用