srp unity_SRP是骗局

srp unity

根据罗伯特·马丁 ( Robert Martin)的 《 清洁法 》( Clean Code) ,“ 单一责任原则 ”意味着“一个阶级应该只有一个改变的理由”。 让我们尝试解密这个模糊的语句,看看它如何帮助我们设计更好的面向对象软件。 如果是这样。

约翰·麦克蒂尔南(1999)

我在有关SOLID的帖子中曾经提到SRP,说它并不能真正帮助程序员理解1974年由Larry Constantine提出的古老的“高凝聚力”概念。现在让我们通过示例进行观察并分析如何考虑到SRP以及是否会变得更加面向对象 ,改进类。

让我们试着类AwsOcket从jcabi-S3 (我已经简化了代码):

class AwsOcket {boolean exists() { /* ... */ }void read(final OutputStream output) { /* ... */ }void write(final InputStream input) { /* ... */ }
}

如果我错了,请纠正我,但根据SRP,此类负责太多事情:1)检查AWS S3中对象的存在,2)读取其内容,以及3)修改其内容。 对? 这不是一个好的设计,必须对其进行更改。

为了更改它并使它仅负责一件事,我们必须引入一个getter,它将返回一个AWS客户端,然后创建三个新类: ExistenceCheckerContentReaderContentWriter 。 他们将检查,读取和写入。 现在,为了阅读内容并将其打印到控制台,我目前正在这样做:

if (ocket.exists()) {ocket.read(System.out);
}

明天,如果我重构类,我将这样做:

if (new ExistenceChecker(ocket.aws()).exists()) {new ContentReader(ocket.aws()).read(System.out);
}

除了一个事实,即这些跳棋,读者和作家都算不上类,但程序纯持有人,这的用法ocket变成了一场噩梦。 当我们将其传递到某个地方时,我们真的无法再知道会发生什么。 例如,我们不能保证来自其中的内容会被即时解密或解码。 我们根本无法装饰它。 它不再是一个对象,而是一个AWS客户端的持有者,其他地方的某些类正在使用该客户端。

是的,现在它只负责一件事:封装对AWS客户端的引用。 就SRP而言,这是一个完美的课程。 但这不再是一个对象。

如果您完全使用SRP原理,则对任何类都将发生相同的情况:它将成为数据或其他对象的持有者,并且在它们之上具有一组setter和getter。 也许除了这些之外,还有一种额外的方法。

我的观点是,SRP是一个错误的主意。

使班级小并且具有凝聚力是一个好主意,但是让他们对“一件事情负责”是对“高度凝聚力”概念的误导性简化。 它只是将它们变成了其他东西的笨拙的载体,而不是成为较小实体的封装和装饰者,以构造较大的实体。

在为这个假的SRP想法而斗争时,我们失去了一个更重要的原则,那就是关于真正的面向对象的编程和思考:封装。 与对象保护其封装的实体的紧密程度相比,对象负责多少事情并不重要。 具有一百种方法的怪物对象比具有五对吸气剂和吸气剂的DTO的问题要少得多! 这是因为DTO会在整个代码中散布问题,而我们甚至都找不到它,而Monster对象始终就在我们眼前,我们可以将其重构为更小的片段。

如果有的话,封装是第一位的,尺寸是第二位的。

翻译自: https://www.javacodegeeks.com/2017/12/srp-is-a-hoax.html

srp unity

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5app大赛,Anyoffice -HTML5大赛 悦心(基于H5开发安卓音乐app)-项目总结

悦心,一款音乐播放器应用。由“女立方”团队开发。眼下。较为流行的音乐播放器有QQ音乐、网易云音乐、多米音乐等。“悦心”音乐播放器的主要功能,提供音乐数据库,点击列表播放音乐,还可对歌曲进行收藏。加入专属音乐心情功能。1.歌曲播放过程…

如何执行shell脚本文件

文章目录 一、使用 shell 命令解释器执行脚本二、使用命令 source 执行脚本文件三、使用路径方式执行脚本文件为什么不能在当前目录直接执行当前目录下的脚本文件呢?四、使用命令 exec 执行脚本文件五、它们有什么区别六、验证是否开启子进程(一)通过父 shell 中的变量是否正…

python 40位的数减个位数_Python——进制表示与转换

在前面两篇文章中介绍了基本的数据类型(Python——记录3——数据类型1,Python——记录4——数据类型2),其中讲到浮点数的计算是通过转换成二进制进行的,那么到底什么是二进制,以及计算机到底包含了哪些进制呢?其实0和1…

javaee概览_Java 9概览

javaee概览对于许多Java 9来说,似乎是一个维护版本,它推动了不能在Java 8中实现的项目Jigsaw。但是,随着JDK中的新模块系统以及与之相关的许多内部更改,Java 9也带来了开发人员工具箱中一些很棒的新内容。 以下是重点内容&#xf…

Linux 命令之 source -- 在当前Shell环境中从指定文件读取和执行命令

文章目录一、命令介绍二、命令格式三、命令示例一、命令介绍 source 命令会在当前 Shell 环境中从指定文件读取和执行命令。source 命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。 source 命令(从 C Shell 而…

opc调试软件_组态王和三菱OPC软件完美演绎天塔之光

许多朋友因为在学习组态王的过程中因为没有实物PLC而发愁,这里我通过天塔之光实例分享一个三菱OPC软件模拟实物PLC与组态王通信的方法。一、需要软件组态王软件三菱PLC编程软件GX Works2三菱OPC软件MX OPC Configurator二、控制要求主画面如上图所示的天塔灯光&…

jar混淆,防止反编译,Allatori工具混淆jar包

文章目录 Allatori工具简介下载解压配置config.xml注意事项 Allatori工具简介 官网地址:https://allatori.com/ Allatori不仅混淆了代码,还最大限度地减小了应用程序的大小,提高了速度,同时除了你和你的团队之外,任何人…

计算机基础知识学前自测,2011计算机二级C语言学前自测题:DOS的基本操作

DOS的基本操作1.DOS系统启动后,下列文件中常驻内存的是( )。A)DOS.COM B)COMMAND.COMC)DISKCOPY.COM D)SYS.COM2.若当前盘为C盘,在A盘目录\data中只有文本文件test.DAT,A 盘当前目录为根目录,则查看该文件的内容可使用的命令是( )…

string拆分为int_拆分为流

string拆分为int我正在为我工​​作的公司准备正则表达式教程更新。 原始教程创建于2012年,从那时起Java发生了一点变化。 有新的Java语言版本,尽管Java中的正则表达式处理仍不完善(nb。它仍使用非确定性FSA),但仍有一…

Linux 命令之 type -- 显示指定命令的类型

文章目录一、命令介绍二、命令格式三、命令类型四、常用选项五、命令示例(一)查看命令的类型(二)显示外部命令的绝对路径一、命令介绍 type 命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。 二、…

python 查找算法_python快速查找算法应用实例

文实例讲述了Python快速查找算法的应用,分享给大家供大家参考。具体实现方法如下:import randomdef partition(list_object,start,end):random_choice start#random.choice(range(start,end1))#把这里的start改成random()效率会更高些x list_object[ra…

驾校约车html网站源码,html5首汽约车微信感恩活动页面模板

html5整屏滚动css3特效,各种c3特效,手机端支持各种分辨率,感恩活动微信页面模板下载。资源下载此资源下载价格为4D币,请先登录资源文件列表codedown123-0831-42/css/animate.min.css , 61353codedown123-0831-42/css/reset.css , …

java+解析未知json_在Java中解析JSON时如何忽略未知属性– Jackson @JsonIgnoreProperties注释示例...

java解析未知json使用Jackson API在Java中解析JSON时的常见问题之一是,当您的JSON包含未知属性(即您的Java类没有对应于所有JSON属性的所有字段)时,该操作将失败。 例如,如果您正在使用REST Web服务中的JSON&#xff0…

双非计算机考研推荐学校传菜电梯,22考研双非院校排名Top100,前3名竟然是这几所!...

原标题:22考研双非院校排名Top100,前3名竟然是这几所!大家好!这里考个研吧!近年来,很多双非高校发展进步很快,实力超过很多末流211大学!国家也实行了双一流、学科评估等,…

按压缩格式整理打包(解包)和压缩(解压)命令

文章目录一、zip 格式(一)使用命令 zip 压缩文件(二)使用命令 unzip 解压 zip 包二、tar 格式(一)打包文件(二)解包 tar 包三、tar.gz 格式方式一:利用已经打包好的tar文…

4线电子围栏安装示意图_知识积累|周界防护-脉冲电子围栏的安装

如今人们对于住宅需求早已今非昔比,不但需要足够大的空间,而且对于住宅所处位置是否交通便利,环境如何,光照情况都有要求,但是最关注的问题还是住宅的安全问题。如今的社会科技发达,不法分子的手段也层出不…

非对称加密 公钥私钥_选择Java加密算法第3部分–公钥/私钥非对称加密

非对称加密 公钥私钥抽象 这是涵盖Java加密算法的三部分博客系列的第3部分。 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文章详细介绍了如何实现非对称的RSA-4096公/私钥加密。 让我们开始吧。 免责声明 …

Linux 命令之 compress -- unix 档案压缩命令

文章目录一、命令介绍二、常用选项三、命令示例(一)压缩文件(二)解压文件一、命令介绍 compress 命令使用“Lempress-Ziv”编码压缩数据文件。compress 是一个相当古老的 unix 档案压缩程序,文件经它压缩后&#xff0…

计算机电源风扇维修,电脑电源开关维修和电源风扇加油图解全过程.doc

窗体顶端窗体底端电源开关维修及电源风扇加油图解全过程2010-05-06 17:56:19 来源:计算机故障查询网 浏览:804次-今天一朋友拿了部联想电脑(虽然俺不喜欢,但每个人有自己的爱好,就没说啥)给我,说让我帮他的电脑体检一下,说开不了机于是开展程序化工作,朋…

内部收益率irr_介绍一个神器,内部收益率IRR

内部回报率IRR这个概念,艾米姐在很多地方都讲到了。可以这么说,任何的理财产品,都可以用这个概念来测算一下收益到底如何。听起来IRR确实很强大啊。那它到底是个什么东东呢?今天就来说一说。一、什么是内部收益率IRR?这…