单一职责原则在 OOP 中有效吗?

2024-03-05

我正在努力理解如何将单一职责原则与 OOP 结合使用。

如果我们要完全遵循这一原则,那么我们是否会留下许多类,其中许多类可能每个都只有一个方法?

如果我们不严格遵循这个原则,那么这个原则还有什么意义呢?


我喜欢这样陈述单一职责原则:“你编写的每件事——每个模块、类、接口或方法,都应该具有one工作。它应该做whole工作和only那份工作。

请注意,您编写的有些东西很大(模块),有些很小(方法),有些介于两者之间(类),有些大东西是由较小的东西组成的。

这不是问题,因为工作或职责也有不同的规模,并且可以分层分解。例如,警察部队的工作是“保护和服务”——一项工作可以分解为“巡逻街道”、“解决犯罪”等,每个工作都可以由不同的单位处理。这就产生了协调的需要(不同的工作),每个单位的工作又分解为各个官员的工作等。

对于每一项大工作,都有很多方法可以将其分解为更小的工作,并且每一项都可以通过遵守 SRP 和其他 SOLID 原则的软件设计来建模。决定如何分解问题是软件设计艺术的重要组成部分。

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

单一职责原则在 OOP 中有效吗? 的相关文章

  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • 如何通过查看程序集来判断程序是否使用动态调度

    我在 Reddit 上读过一篇文章Herb Stutter JIT 永远不会像原生一样快 http www reddit com r programming comments rr2dj herb stutter jit will neve
  • 面向对象设计的良好参考[关闭]

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

    在看一些OOP资料时 我想到了这个让我有点困惑的问题 考虑具有以下接口 抽象类和具体类 package one public interface A void doStuff package one public abstract clas
  • 为什么Perl的SUPER调用不使用箭头方法?

    我注意到 当您调用超类的方法时 您需要执行以下操作 my self class gt SUPER new 为什么不是这样 my self class gt SUPER gt new 我怀疑是因为 class gt SUPER gt new
  • 使用字符串选择对象属性

    我正在编写的 C 程序遇到了一些问题 如果有人能提供帮助那就太好了 背景是这样的 并不是非常重要 但这就是为什么我需要弄清楚如何做到这一点 我正在使用数据库的 Web 服务来检索有关数据库中条目的信息 对数据库的每次访问都会返回一个具有许多
  • 使用存储库时,ASP.NET MVC 中业务逻辑的最佳位置是什么?

    在 ASP NET MVC 项目中实现数据库存储库时 将业务逻辑放入其中是否正确 或者将逻辑放入控制器类中可能更好 或者使用额外的服务和帮助程序类来操作数据 最终 除了其自己的层 作为 模型 层的一部分 之外 您的业务逻辑没有一个完美的位置
  • 如何从继承的方法中获取派生类的路径?

    如何从继承的方法中获取当前类的路径 我有以下内容 and
  • 为什么Java不支持C中的clrscr这样的函数?

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

    目的是什么getInstance 在Java中 在我的研究过程中我一直在读getInstance 有助于实现单例设计模式 根据我的理解 这意味着整个程序中只有一个实例 但我不能只使用静态吗 这不是静态的全部意义吗 如果我只有静态方法和字段
  • 如何将只缓存某些内容的字段添加到ADT?

    我经常需要向 ADT 添加字段 仅记住一些冗余信息 但我还没有完全弄清楚如何又好又高效地做到这一点 说明问题的最好方法是举个例子 假设我们正在使用无类型 lambda 项 type VSym String data Lambda Var V
  • 丰富的领域模型和 ORM

    Martin Fowler 认为贫血领域模型是一种反模式 将持久性模型作为域模型进行滚动似乎也严重偏离 因为对象关系阻抗不匹配 http en wikipedia org wiki Object Relational impedance m
  • OOP JavaScript - 创建自定义 Div 对象

    我刚刚开始使用 JavaScript 进行 OOP 我想创建一个自定义 面板 这是我到目前为止所拥有的 function ShinyPanel css attributes this container document createEle
  • 覆盖默认标识符生成策略对关联没有影响

    交响乐 2 7 2 学说 ORM 2 4 7 MySQL 5 6 12 PHP 5 5 0 我有一个具有自定义 ID 生成器策略的实体 它工作完美 在某些情况下 我必须使用 手工制作 的 ID 来覆盖此策略 当主实体在没有关联的情况下被刷新
  • 我应该使用课程吗? (Python)

    我正在尝试编写一个包含一些数学函数的小型 Python 模块 例如 它可能包含如下函数 def quad x a b c return a x 2 b x c 您可能会注意到它包含几个参数 即a b c 除了变量x 现在 如果我将其放入文件
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • 我们可以实例化一个抽象类吗?

    在一次采访中 有人问我 我们是否可以实例化一个抽象类 我的回答是 不 我们不能 但是 面试官告诉我 错了 我们可以 我对此争论了一下 然后他告诉我自己在家尝试一下 abstract class my public void mymethod
  • PHP - 获取类公共变量?

    请考虑下面的代码 class A public function construct class B extends A public a a public b b public c c 如何从父类中获取 B 类的公共变量而不确切知道它们是
  • tkinter - 使用按钮在帧之间来回切换

    我需要功能 最好是一个功能 当按下下一页和后退按钮时可以在页面之间来回切换 我想这可以通过将布尔变量分配给后退和下一页按钮来完成 不确定是否可以这样做 来确定您是否要前进或后退所有页面的有序列表 需要知道当前升高的框架的索引 索引可用于找出
  • IntelliJ可以自动创建装饰器类吗?

    有时 我创建一个像这样的装饰器类 class MyInterfaceDecorator implements MyInterface private final MyInterface delegate constructor taking

随机推荐

  • 从使用 matplotlib 生成的 delaunay 三角剖分中获取外心

    如果我使用 matplotlib 为一组点生成 delaunay 三角剖分 那么获取已生成的三角形的外心的最合适方法是什么 我尚未在三角测量库中找到明显的方法来执行此操作 您应该能够使用以下方法计算它matplotlib delaunay
  • Spree自定义角色权限

    我正在尝试在狂欢特定权限内授予一些自定义角色 在任何地方都找不到这个答案 角色能力 rb class RoleAbility include CanCan Ability def initialize user user User new
  • Visual Studio 可以理解,但 Unity 不能?

    我已在 Visual Studio 中安装了 Microsoft Identity Client 现在可以声明using Microsoft Identity Client 在代码内 Visual Studio 很高兴 然而 团结却并非如此
  • 在 django 模型中铸造对象

    我正在使用 models py 制作一个 django 项目 其代码如下 class Record models Model id models AutoField primary key True class TTAMRecord Rec
  • 如何使用 dx 和 dy(导数)创建 Swift CGVector?

    我试图了解如何在 Swift 中创建 Vector 因为当我执行 CGVectorMake 时 它告诉我将 dx 和 dy 导数 作为 CGFloat 传递 如何仅使用该信息创建矢量 线 谁能给我解释一下吗 喜欢傻瓜吗 我在谷歌中搜索 但仍
  • 如何使用ffmpeg命令生成RTMP测试流?

    我想通过生成带有时间戳的 RTMP 测试视频来测试我的流媒体基础设施 这可能看起来像那样screen https s media cache ak0 pinimg com originals 65 25 9c 65259ca7ebaba59
  • 如果只有一列,为什么 Pandas 转换会失败

    看完这个之后question https stackoverflow com questions 19265942 pandas create a new column filled with the number of observati
  • 如何使用本机 Win32 API 从焦点窗口获取选定的文本?

    我的应用程序 将在系统上运行尝试监视热键 当用户在任何窗口中选择某些文本并按下热键时 当我收到 WM HOTKEY 消息时 如何获取所选文本 为了将文本捕获到剪贴板 我尝试发送Ctrl C using keybd event and Sen
  • SQL Server 2012 中的 group_concat 与 ORDER BY 另一列

    我有一个包含约一百万个条目的表 如下所示 customer id purchased at product 1 2012 06 01 00 00 apples 1 2012 09 02 00 00 apples 1 2012 10 01 0
  • 找不到内存泄漏

    我一直在开发 WP7 应用程序 它是图像库应用程序 实现了基本的缩放和轻拂手势 出于测试目的 我将离线图像 它们的文件名已编号 设置为 内容 来编译应用程序 并通过硬编码字符串 稍后将被替换 访问它们 但后来意识到应用程序消耗大量内存 我以
  • C++ - 将 istream_iterator 与 wstringstream 结合使用

    我正在尝试向我编写的程序添加 Unicode 支持 我的 ASCII 代码已编译并包含以下几行 std stringstream stream abc std istream iterator
  • 将自定义列产品可见性添加到 Woocommerce 3 中的管理产品列表

    我正在尝试使用产品的目录可见性值向管理产品列表添加自定义列 基本上 我需要更容易地知道哪些是隐藏的 哪些不是 到目前为止我的子主题的function php的代码 add filter manage edit product columns
  • 如何设置 GitHub.com 中的默认分支?

    我找到了以下信息 但没有找到哪里可以访问它 账户设置里没找到 有回购设置页面吗 您必须是回购所有者吗 https github com blog 421 pick your default branch https github com b
  • 承诺链内的返回值没有被调用

    我正在使用 Promise 库 Bluebird 目前遇到的问题是函数内的所有内容都运行良好 但是当我尝试返回值时 函数反而返回undefined 这是承诺链 function foo createGroupMembers parsedCh
  • 无法安装:错误 0x80070643:无法安装 MSI 包

    我正在尝试安装一个应用程序 msi 我使用 WiX 安装程序创建了一个 exe 它有依赖项 我尝试将其安装在某些电脑上 效果非常好 但在其中一个系统中 当它尝试安装 msi 时 它会给出错误并回滚安装 这是正常的 无法弄清楚为什么它没有安装
  • PHP - 服务器端变量将永远“存在”?

    我正在寻找一种简单的方法来在服务器内存中存储计数器以允许页面加载选择 有点 伪代码 if counter is odd then load page x else even counter load page y increment cou
  • 将用户定义的命令行参数添加到/?窗户

    使用 Inno Setup 可以添加用户定义的命令行参数 当我使用 HELP命令中未列出用户定义的参数 如何将带有描述的命令添加到 HELP window Inno Setup 6 0 支持HelpTextNote message http
  • Oracle CTE 合并

    我正在尝试使用 CTE 公用表表达式 的简单合并语句 但它给出了一个错误 MERGE INTO emp targ USING ERROR at line 4 ORA 00928 missing SELECT keyword 合并语句中不允许
  • 反距离加权插值

    我想计算一个重量作为距离的倒数 例如反距离加权插值 http en wikipedia org wiki Inverse distance weighting double wgt 0 wgt tmp result 0 for int i
  • 单一职责原则在 OOP 中有效吗?

    我正在努力理解如何将单一职责原则与 OOP 结合使用 如果我们要完全遵循这一原则 那么我们是否会留下许多类 其中许多类可能每个都只有一个方法 如果我们不严格遵循这个原则 那么这个原则还有什么意义呢 我喜欢这样陈述单一职责原则 你编写的每件事