返回类型的具体类型或接口?

2024-04-12

今天我遇到了对象编程风格、具体类型或接口的一个基本悖论。

对于方法的返回类型,哪个更好:具体类型还是接口?

在大多数情况下,我倾向于使用具体类型作为方法的返回类型。因为我相信具体类型对于进一步使用更加灵活并且公开更多功能。

其阴暗面:耦合。 天使般的类型:具体类型本身包含您最初要返回的接口以及额外的功能。

你的拇指规则是什么?

这有什么编程原理吗?


BONUS: 这是我的意思的一个例子ReadOnlyCollection 或 IEnumerable 用于公开成员集合? https://stackoverflow.com/questions/491375/readonlycollection-or-ienumerable-for-exposing-member-collections


根据经验,返回类型应尽可能具体,参数类型应尽可能不具体。也更喜欢接口,因为您可以在必要时交换您的实现,而无需更改 API 的客户端。

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

返回类型的具体类型或接口? 的相关文章

  • 如何在 Haskell 中建模类层次结构?

    我是一名 C 开发人员 来自面向对象的世界 我从接口 类和类型层次结构的角度开始思考 由于 Haskell 缺乏面向对象 有时我发现自己陷入困境 无法想出用 Haskell 建模某些问题的方法 如何在 Haskell 中对涉及类层次结构的现
  • 如何使用“prototype”函数正确编写 JavaScript 属性和方法?

    我正在尝试学习如何使用 javascript 原型创建和使用 javascript 属性和方法 但遇到了一些困难 在下面的代码中 我尝试创建一个名为 radius 的简单对象 其半径为 4 并具有一个名为 getCircumference
  • 使用 Symfony 的 EventDispatcher 组件的正确方法是什么?

    我想通过使某些类可观察来促进 PHP 代码中的松散耦合 交响乐的事件分发器组件 https github com symfony EventDispatcher看起来很有希望 SPL 也是如此Spl观察者 http php net splo
  • 致命错误:未捕获错误:在 null 上调用成员函数 query() [已关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我是 OOP 的新手 仍在尝试 有人可以指出我的错误在哪里吗 我收到错误 致命错误 未捕获错误 在以下行上对 null
  • 使用公共类实现 Monolog

    我成功地实现了用于测试目的的 Monolog 记录器 现在我正在尝试在项目中使用它 该项目不使用任何MVC框架 我正在尝试编写一个公共类文件来包装对 Monolog 实例的访问 常用类文件 文件 app log php require au
  • 捕获/监听函数的执行

    我想添加到模块记录器中的所有功能 我想记录函数的 开始 时间和 结束 时间 这样我就可以获得每个函数 同步函数 的执行时间 但我不知道如何让它发挥作用 我不想以某种动态方式重写函数 我想在将来调试它们 所以需要保留原始代码 我需要找到某种方
  • Scala:函数值的 eta 扩展(不是方法)

    在尝试了 scala 的 eta 扩展之后 我发现了一个奇怪的功能 让我们定义一个方法 scala gt def sum a Int b Int Int a b sum a Int b Int Int 好吧 到目前为止 一切都很好 现在让我
  • 从 Java 方法返回多个值:为什么没有 n 元组对象?

    为什么没有一个 标准的 Java 认证的 解决方案作为 Java 语言本身的一部分 从 Java 方法返回多个值 而不是开发人员必须使用自己的方法 例如映射 列表 对等 为什么Java不支持n元组对象 特别是考虑可能一起 串联 修改两个对象
  • java对象间通信

    还在学习Java Swing 又让我问了这个问题 但这确实是一个普遍的面向对象问题 如果我有一个主类 包含 main 它会创建一个执行某些操作的新对象 A 主类现在具有对该对象的引用 对象 B 如何访问该对象的属性 我能想到的唯一方法是让主
  • C# 中的方法与属性 - 有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 属性与方法 https stackoverflow com questions 601621 properties vs methods 在方法中 您也可以键入一些代码 也可以在属性中键入一些代码 例
  • 如何*真正*编写 UML 基数?

    我想一劳永逸地知道如何编写 UML 基数 因为我经常不得不争论它们 所以非常欢迎证明和来源 如果我想解释一下a Mother可以有几个Children but a Child有且仅有一个Mother 我应该写 Mother 1 Child
  • Ruby on Rails 3:如何分别检索 POST 和 GET 参数?

    我知道你可以使用获取参数params 但问题是它合并了所有参数 无论它们是通过GET or POST 如果您通过以下方式发送请求GET 没问题 参数只能挤在URL里 但如果你发送一个POST具有类似 URL 的请求 blabla foo b
  • 为什么所有的 Active Record 都讨厌? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Cython 中的抽象类(具有纯虚方法)

    快速版本 如何在 Cython 中声明抽象类 目标是只声明接口 以便其他类可以继承它 必须有没有实施这个班级的 接口 pxd cdef class IModel cdef void do smth self impl pyx from in
  • 为什么要使用继承? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 代理模式和装饰者模式的区别

    你能给出任何好的解释吗 Proxy and 装饰者 我看到的主要区别是 当我们假设Proxy uses 作品 and 装饰者 uses 聚合那么似乎很清楚 通过使用多个 一个或多个 装饰器您可以修改 添加功能到预先存在的实例 装饰 而Pro
  • UML三元关联实现java代码[重复]

    这个问题在这里已经有答案了 三元关联是结构关系 指定一个事物的对象连接到其他两个事物的对象 我理解这种关系 但我不知道如何实现显示这三个类之间关联的方法 让我们考虑下面的例子 项目有许多使用特定编程的开发人员 语言促进发展 开发人员使用特定
  • 如何从一个 cfc 文件中函数的查询中调用另一个 CFC 文件中的函数?

    我有一个具有多种功能的 cfc 文件 info cfc 如下所示
  • 如何区分类实现中两个协议的相同方法名称?

    我有两个协议 protocol P1 void printP1 void printCommon end protocol P2 void printP2 void printCommon end 现在 我在一个类中实现这两个协议 inte
  • 棋子层次结构设计:继承与类型字段

    我有一个片段的基类 class piece 和一个包含派生对象的数组 piece board 8 8 优点 通过虚拟函数进行简洁的设计 缺点是 如果我必须在板上找到一块或比较一块 我必须恢复到动态铸造 或 typeid 它很丑陋 并且在发出

随机推荐

  • 如何处理 Razor Pages 中的 input=file / IFormFile 双向绑定

    我有一个实体 它具有 byte 将徽标作为 varbinary 存储在数据库中 但为了在 Razor 页面上使用此模型 我对其进行了扩展并添加了 IFormFile 属性来接收上传的文件 public class Company publi
  • Adb安装进度条

    我是这方面的初学者 所以如果我问任何明显的问题 请介意我 我正在尝试安装一个apk到我的设备使用adb install apk apk但是 那apk大约有几百 MB 大 并且需要一些时间 我可以在命令窗口中实现某种进度条来显示进度吗 我见过
  • 如何将文件从 HTML5 拖放到 Rails 3 应用程序和回形针?

    我正在尝试使用 Paperclip 在 Rails 3 应用程序中获得一些 html5 拖放功能 所以 基本上 将一个或多个文件拖放到 DIV 上 文件被 POST 到 Rails 操作 一起或一次一个 Rails 操作将每个文件保存为 P
  • 如何使用 Ruby 通过 HTTP 下载文件?

    如何使用 Ruby 通过 HTTP 下载文件 可能是下载文件的最短方法 require open uri download open http example com download pdf IO copy stream download
  • 向量化 for 循环 NumPy

    我对 Python 比较陌生 并且有一个嵌套的 for 循环 由于 for 循环需要一段时间才能运行 因此我试图找到一种方法来向量化此代码 以便它可以运行得更快 在本例中 coord 是一个 3 维数组 其中 coord x 0 0 和 c
  • 跨域字体问题

    请在发表评论之前阅读所有内容 我目前正在开发一个托管在 Amazon Web Services AWS 上的大型网站 这使我们能够在网站可能承受较大流量负载的情况下使用可扩展性功能 最初 我们首先将网站的代码分离为 HTML PHP Jav
  • PHP同时运行多个脚本

    我有一个带有对象服务器的数组 如下所示 Array 0 id gt 1 version gt 1 server addr gt 192 168 5 210 server name gt server1 1 id gt 2 server ad
  • 带元组键的不区分大小写的字典

    我有一本字典 其中键是一个元组 其中第一项是日期 第二项是字符串 我希望字典不区分大小写 我知道 如果键只是一个字符串 我可以在声明字典时将 StringComparer OrdinalIgnoreCase 作为参数传递 但是当键是元组时
  • 如何将 Django QuerySet 转换为字典列表?

    如何转换 DjangoQuerySet into a list of dict是 我还没有找到这个问题的答案 所以我想知道我是否缺少某种每个人都使用的常见辅助函数 Use the values https docs djangoprojec
  • Rails 4:使用 Cocoon Gem 将 child_index 添加到动态添加(嵌套)表单字段

    更新 我正在尝试向涉及多个模型的嵌套表单添加 删除表单字段 我看过 Ryan Bates 的 Dynamic Forms railscast 并且我提到过本文 https hackhands com building has many mo
  • php 我如何从文本文件中获取某些关键字?

    所以在服用了几次 Advil 之后 我想我需要帮助 我正在尝试制作一个脚本 让用户上传 txt 文件 该文件将如下所示 EXT DUNKIN DONUTS DAY Police vehicles remain in the parking
  • 如何在 VB.NET 中声明内联数组

    我正在寻找 VB NET 的等效项 var strings new string abc def ghi Dim strings As String abc def ghi
  • 多种环境中的.htaccess

    我知道以前曾有人问过类似的问题 但我还没有找到适合我的情况的任何真正具体的答案 我有一个在多个环境 本地 开发 生产 上运行的 ExpressionEngine 站点 每个环境都需要不同的 htaccess 规则 所有环境 删除index
  • 如何将列表从控制器传递到asp.net mvc中的javascript函数?

    我在控制器中有这个查询 DataClasses1DataContext behzad new DataClasses1DataContext var query from p in behzad ImagePaths select new
  • Jekyll 无法服务(Ruby 不兼容的库版本)

    当尝试跑步时jekyll serve 它似乎构建正确 尽管有我无法解决的警告 但随后无法提供服务 jekyll build完成 但生成的文件缺少已编译的 CSS 输出来自jekyll serve Ignoring ffi 1 9 10 be
  • PetaPoco 处理枚举吗?

    我正在尝试使用 PetaPoco 将表转换为 POCO 在我的表中 有一列名为TheEnum 此列中的值是表示以下枚举的字符串 public enum MyEnum Fred Wilma 当 PetaPoco 试图将字符串 Fred 转换为
  • 如何快速打印数组中对象的值,而不是其位置

    我有一个类 其中包含同一项目中单独的 swift 文件中某些企业家的数据 它看起来像这样 class Entrepreneur NSObject var name String var netWorth 0 0 var company St
  • 如何在不改变编码风格的情况下避免空白锚下划线?

    看看下面的小提琴 http jsfiddle net DNhAk 14 http jsfiddle net DNhAk 14 当您的图像的文本包含在锚点 链接中时 代码中图像和文本之间的空白会在呈现的页面中的文本之前创建一个带下划线的空白
  • RIFF/Wav 标头中的“LIST”块是什么?

    我正在编写一个 wav 播放器 并且使用以下文件格式规范 http soundfile sapp org doc WaveFormat http soundfile sapp org doc WaveFormat 正如您所看到的 它期望 一
  • 返回类型的具体类型或接口?

    今天我遇到了对象编程风格 具体类型或接口的一个基本悖论 对于方法的返回类型 哪个更好 具体类型还是接口 在大多数情况下 我倾向于使用具体类型作为方法的返回类型 因为我相信具体类型对于进一步使用更加灵活并且公开更多功能 其阴暗面 耦合 天使般