许多参数和丢失的信息

代码越少越好? 对象越少越好? 是真的吗 像往常一样,这取决于。

在某些情况下,通过添加更多内容,我们会添加不必要的复杂性。 当我们仅出于“将来可能需要这种额外的灵活性”而创建接口或其他抽象时,就会发生这种情况。 当我们忘记YAGNI原理而我们编写的代码可能会使我们的生活变得更轻松,如果出现了新的需求,这些需求可能永远不会发生。

另一方面,我们遇到的情况与我在最近的文章中描述的情况类似。 我向您展示了一个示例,其中我们添加了一些内部执行几乎相同的方法。 但是,通过添加它们,我们获得了很多好处–代码变得更易于理解。 此附加代码为我们提供了有关对象正在执行的操作的信息,而不是如何实现的。

今天,我想与大家分享另一个例子,该例子表明更少的代码有时可能意味着更少的可读性代码。

很久以前…

今天,我想和您谈谈历史:

public class History {public void store(
Author author, RefactoringType type, Scope scope, 
RefactoringJustification justification, Date today) {// some code
}

是否容易弄清楚要存储哪种存储方法? 有可能理解吗? 好吧,即使是这样,我相信我们所有人都可以同意这绝对是困难的。

您如何从方法的声明中提取必要的信息? 我可以假设,首先您要阅读类和方法的名称以查找上下文。 好,我们有。 我们想存储一些历史信息。 现在最困难的部分开始了–您必须找出我们要存储的内容。 您不能只是简单地阅读此信息,因为该信息不存在于代码中。 在这种情况下,您可能会尝试通过查看参数列表来查找此信息。 您将阅读它们,并希望能够弄清楚代码的作者想要存储什么。

或者,您可以查看引入此代码的提交消息。

或者,您可以查看方法的定义并在实现中寻找答案。

虽然不是最好的主意。

您是否认为轻松获得此信息会很棒? 要拥有无需额外努力就能理解的代码? 我相信这正是我们应该如何编写的方式。

救援参数对象

为什么在阅读完方法的声明后还不了解所有内容?

通过某种方式,我们可以在这里找到有关历史的信息–班级名称为我们提供了这些信息。

我们知道这与存储内容有关–该方法的名称具有很强的描述性。

问题在于我们不知道要在历史记录中存储什么。 为什么? 因为输入参数没有给我们这些信息。

这些参数指示我们要存储的块,但是,不解释当将所有这些块放在一起时我们应该知道什么。 我们正在获取有关实现(使用的部分)的信息,我们不知道此代码应该做什么。

我们能做什么? 我们应该隐藏实现并解释我们希望通过此代码实现的目标。 那就是那一刻
参数对象可以解决。 您可以将其视为一些不同对象的盒子,作为可以减少依赖性的解决方案。 但是,对我而言,使用此模式的最大好处是您将不得不命名该对象,并因此而不得不提供有价值的信息。

让我给你演示:

public class History {public void store(CodeDelta delta) {// some code
}

现在很明显我们要存储什么。 我们与阅读我们代码的人共享有用的信息。 我们还隐藏了一个实现。 他们可以专注于重要的事情,而不会被仅在编写或修改方法时才感兴趣的所有其他细节所打扰。

那么,您说的越少越好?

翻译自: https://www.javacodegeeks.com/2016/07/many-parameters-lost-information.html

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

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

相关文章

并发编程---线程queue---进程池线程池---异部调用(回调机制)

线程 队列:先进先出堆栈:后进先出优先级:数字越小优先级越大,越先输出import queueq queue.Queue(3) # 先进先出-->队列q.put(first) q.put(2) # q.put(third) # q.put(4) #由于没有人取走,就会卡主 q.put(4,block…

avi编码格式以及查看的视频编码方式的小工具

avi编码格式以及查看的视频编码方式的小工具 2009-06-06 17:55:47| 分类: 默认分类 | 标签: |字号大中小 订阅 首先要说明的是,文件后缀名为avi的文件不一定使用的编码方式就是一样的,所以才写下来,以备以后查阅…

SQL Server遗失管理权限账号密码怎么办?

假如一个SQL Server实例只允许“SQL身份认证”模式登录数据库,而糟糕的是你忘记了sa的密码(sa出于安全考虑应该被禁用,这里仅仅为了描述问题)或其它具有sysadmin角色的登录名的密码?个人就遇到这样一个案例&#xff0c…

MFC 定时器使用方式

MFC 定时器使用方式 2011-04-30 12:24:58| 分类: 默认分类 | 标签: |字号大中小 订阅 用SetTimer函数 创建定时器 参数1表示定时器的ID,参数2表示时间间隔,最后一个参数是处理的函数,如果填NULL表示&#xff0…

js循环获取table中的值

<script type"text/javascript">function getTdValue() {var tableId document.getElementById("tab");var str "";//获取table中的某一列的值for (var i 1; i < tableId.rows.length; i) {alert(tableId.rows[i].cells[3].innerHTM…

MFC中Radio Button使用方法

MFC中Radio Button使用方法2012-04-19 09:44:22 我来说两句 收藏 我要投稿 先为对话框加上2个radio button&#xff0c;分别是Radio1和Radio2。 问题1&#xff1a;如何让Radio1或者Radio2默认选上&#xff1f;如何知道哪个被选上了&#xff1f; 关键是选上&#x…

使用不可变对象创建值对象

在回答我最近的文章中AutoValue&#xff1a;生成的不可变的值类 &#xff0c; 布兰登认为&#xff0c;这可能是有趣的&#xff0c;看看如何AutoValue比较项目Lombok和Immutables和凯文借调这一点。 我同意这是一个好主意&#xff0c;但是我首先将这篇文章发布为Immutables的简要…

css3 transform实现水平和垂直居中

代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible…

ubuntu vnc 远程连接桌面

ubuntu vnc 远程连接桌面 2011-05-18 10:30:48 分类&#xff1a; LINUX 一、WindowsXP远程连接Ubuntu的桌面 1.在WindowsXP上下载并安装RealVNC; 2.在Ubuntu中操作&#xff0c;打开 应用程序/互联网 /远程桌面查看器; 3.首先要配置一下&#xff0c;打开 系统/首选项/远程桌面&…

hkws摄像头拆机

转载于:https://www.cnblogs.com/feipeng8848/p/8961924.html

java虚拟机常用命令工具

java虚拟机常用命令工具 博客分类&#xff1a; 虚拟机 虚拟机jvmjava 一、概述 程序运行中经常会遇到各种问题&#xff0c;定位问题时通常需要综合各种信息&#xff0c;如系统日志、堆dump文件、线程dump文件、GC日志等。通过虚拟机监控和诊断工具可以帮忙我们快速获取、分…

Spring Cloud Zuul –编写过滤器

Netflix OSS项目Zuul充当后端服务的网关&#xff0c;并支持添加安全性&#xff0c;路由等边缘功能。 在Zuul世界中&#xff0c;称为Zuul过滤器的组件提供了特定的边缘功能&#xff0c;为基于Spring Cloud的项目编写这种过滤器非常简单。 此处提供了添加过滤器的良好参考。 在这…

嵌入式基础篇 - 第2章 Systick系统定时器

2.1 STM32 的时钟系统 STM32 芯片为了实现低功耗&#xff0c;设计了一个功能完善但却非常复杂的时钟系统。普通的MCU 一般只要配置好 GPIO 的寄存器就可以使用了&#xff0c;但 STM32 还有一个步骤&#xff0c;就是开启外设时钟。 图2-1 STM32的时钟树在 STM32 中&#xff0c;…

kill所有java进程

kill所有java进程 ps -ef | grep java | grep -v grep |awk {print $2} | xargs -p kill -9如果不需要询问&#xff0c;把xargs后面 -p 参数去掉Aix 通过shell脚本kill杀指定进程&#xff0c;比如杀所有java进程 2012-11-16 15:31, Tags: 127人阅读----脚本杀进程-------------…

sqa计划

一、sqa计划 本计划是对“生活在长大”项目的流程规范和约定&#xff0c;本次计划包括质量保证、质量控制、数据收集和统计报告四部分。 质量保证&#xff1a; 保证项目的完整和运行&#xff0c;没有重大BUG。 计划进度 任务      时间        结果       …

正确地kill java历程

正确地kill java历程 www.MyException.Cn 发布于&#xff1a;2012-06-27 14:20:08 浏览&#xff1a;4次正确地kill java进程在linux/unix下&#xff0c;你会怎么中止一个java进程&#xff1f; 你可能会回答 kill -9 pid&#xff0c;这是一种在多数情况下正确的做法。不过&a…

并发加对象锁_通用并发对象池

并发加对象锁在本文中&#xff0c;我们将介绍如何在Java中创建对象池。 近年来&#xff0c;JVM的性能成倍增加&#xff0c;大多数类型的对象几乎都变得多余&#xff0c;从而提高了对象池的性能。 从本质上讲&#xff0c;对象的创建不再像以前那样昂贵。 但是&#xff0c;有些对…

SpringAOP02 自定义注解

1 自定义注解 1.1 创建自定义注解 从java5开始就可以利用 interface 来定义自定义注解 技巧01&#xff1a;注解不能直接干扰程序代码的运行&#xff08;即&#xff1a;注解的增加和删除操作后&#xff0c;代码都可以正常运行&#xff09; 技巧02&#xff1a;Retention 用来声明…

MFC处理回车窗口消失

MFC处理回车窗口消失 2011-04-24 12:21:31| 分类&#xff1a; C&C&VC | 标签&#xff1a;对话框 回车 mfc 消失 |字号大中小 订阅 我的方法是&#xff1a;找到自己设计的按钮&#xff0c;在属性-风格中选择default button&#xff1b;如果没有自己设计的but…

您的框架有多可扩展性?

在参加会议时&#xff0c;我们总是会见到高素质的决策者&#xff0c;他们经常问同样的问题&#xff1a; 您的框架有多可扩展性&#xff1f;如果我需要比您开箱即用的功能更多的东西怎么办&#xff1f; 。 这个问题是非常合理的&#xff0c;因为他们只是不想被卡在开发曲线的中间…