fegin 参数丢失_许多参数和丢失的信息

fegin 参数丢失

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

在某些情况下,通过添加更多内容,我们会添加不必要的复杂性。 当我们仅出于“将来可能需要这种额外的灵活性”而创建接口或其他抽象时,就会发生这种情况。 当我们忘记了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

fegin 参数丢失

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

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

相关文章

【安卓开发 】Android初级开发(十)Android中app自动更新版本号比较

//版本号比较:前者小返回true,前者大返回false public static boolean versionCompareTo(String version1, String version2) {Log.d("输出第一个参数",version1);Log.d("输出第二个参数",version2);version1 version1 null ? "" …

高通写号工具_高通推出桌面平台新ARM处理器并认为我们的电脑性能没必要那么高...

高通公司在日前举办的骁龙技术峰会上宣布推出骁龙7c / 8c处理器 , 这些处理器全部都是面向笔记本电脑推出的。这也是高通和微软合作推出 Windows 10 ARM 设备的组成部分 , 高通希望能够在桌面平台挑战英特尔统治地位。如果你有印象的话或许还记得高通此前推出的骁龙 8cx芯片组&…

java创建一个不可变对象_使用不可变对象创建值对象

java创建一个不可变对象在回答我最近的文章中AutoValue:生成的不可变的值类 , 布兰登认为,这可能是有趣的,看看如何AutoValue比较项目Lombok和Immutables和凯文借调这一点。 我同意这是一个好主意,但是我首先将这篇文章…

混合高斯模型_高斯混合模型(GMM)

下图所示,显然用右边的图描述当前分布更加合理,即应用了两个高斯分布。图中每一个样本点同时属于任何一个高斯模型。高斯混合模型 从几何角度来理解,GMM是由多个高斯分布叠加而成,可以看做是多个高斯分布的加权平均。其中&#x…

【安卓开发 】Android初级开发(网络操作)

URI部分 URI详情 uri的具体案例使用参考,app与网页之间的页面跳转 H5唤醒app并跳转到指定页面 H5打开APP技术总结 H5页面唤醒app的方法 Android配置Scheme使用浏览器唤起APP的方式,以及不生效问题解决 网页唤起app,并传值到app中使用的全过程 and…

dynamodb java_使用Java第2部分查询DynamoDB项

dynamodb java在上一篇文章中,我们有机会发布了一些基本的DynamoDB查询操作。 但是,除了基本操作之外,DynamoDB api还为我们提供了一些额外的功能。 投影是具有类似选择功能的功能。 您选择应从DynamoDB项中提取哪些属性。 请记住&#xf…

【H.264/AVC视频编解码技术】第五章【哈夫曼编码】

本文章所需要的内容需要自行准备一个名为input.txt的文本文件作为案例演示。内容选择英语小短文即可 第一步,建立哈夫曼数 #include <iostream> #include <fstream> #include <queue> #include <vector> #include <string>using namespace st…

gitpython git diff_Python全栈开发-git常用命令

欢迎关注我的号Python全栈开发-git常用命令​mp.weixin.qq.com### Python全栈开发-git常用命令本节内容- github介绍- 安装- 仓库创建& 提交代码- 代码回滚- 工作区和暂存区- 撤销修改- 删除操作- 远程仓库- 分支管理- 多人协作- github使用- 忽略特殊文件.gitignore### 2.…

来的多可选_您的框架有多可扩展性?

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

【H.264/AVC视频编解码技术】第六章【指数哥伦布编码】

H264中语法元素描述符 指数哥伦布 (Exponential-Golomb) 熵编码 指数哥伦布编码同哈夫曼编码一样,都是变长编码。 二者的显著区别: 信源相关性:哈夫曼编码依赖于信源的概率分布;指数哥伦布与信源无关。 额外信息:哈夫曼编码的数据必须额外携带与信源匹配的码表;指…

python素描效果_python实现图片素描效果

代码如下&#xff1a;from PIL import Image #图像处理模块import numpy as npa np.asarray(Image.open("这里是原图片的路径").convert(L)).astype(float)#将图像以灰度图的方式打开并将数据转为float存入np中depth 10. # (0-100)grad np.gradient(a) #取图像灰度…

java 认证_Java认证:认证或不认证

java 认证专业认证始终是一个有争议的主题&#xff0c;有资格的人在争论收益与成本/时间的关系。 通过Oracle的Java认证&#xff0c;我认为有两个主要的受众可以从中受益&#xff1a; 那些开始从事软件事业的人。 扎实的工作经验和可证明的代码将永远是潜在雇主的首要考虑因素…

C++ 11 深度学习(七)位运算常见操作

1. 取出数中任意k位置的二进制位是0还是1 n >> k & 1 原理&#xff1a;先把想要取出的位置移动到个位&#xff0c;1的二进制是 0001 , 进行与操作就可以提取出最后一位是0还是1&#xff1b;二进制是从右向左&#xff0c;由低到高&#xff0c;从0到7。 2. 右移操作 …

聚合项目访问后台接口失败_聚合支付系统和免签支付系统对未来支付市场有哪些影响...

时势所趋&#xff0c;在如今支付通道不稳定的情况下&#xff0c;四方聚合支付的出现弥补了通道不稳的情况&#xff0c;四方聚合支付可以接入多个三方&#xff0c;实现在三方不稳的情况直接后台切换三方&#xff0c;实现一秒切换&#xff0c;还可以接入个人免签支付系统&#xf…

activemq消息持久化_ActiveMQ 5.x中的消息持久性

activemq消息持久化我被问了很多关于ActiveMQ如何存储消息&#xff08;或在某些情况下不存储&#xff09;的基本知识。 这是它的高级解释。 注意&#xff0c;上下文在JMS中。 如果您使用ActiveMQ的非JMS客户端&#xff08;即STOMP&#xff0c;AMQP&#xff0c;MQTT等&#xff0…

【安卓开发 】Android初级开发(十一)Android中多线程

线程的创建 1.创建一个Thread类&#xff0c;或者创建一个Thread子的对象&#xff1b; 2.创建一个Runnable接口的类对象; 传入Runnable对象创建线程 package com.sina.baode;import android.util.Log;/** 自定义一个继承于Runnable*/public class DemoThread implements Run…

td 内单选框不可用_在TD,我和曾经的老师变成了同事,也收获了最满意的“课外活动”...

早就想找个时间好好写一篇文章记录一下我在TD的学习工作经历了&#xff0c;同时表达一下我对TD深深的爱和感谢。一、结缘TD一年前&#xff0c;我第一次报了TD的AP环境科学寒假班。由于当时我在冲刺三月的SAT&#xff0c;整个寒假我一心扑在了SAT上&#xff0c;没来得及听TD的直…

activiti脚本任务_Activiti中的安全脚本如何工作

activiti脚本任务最近的Activiti 5.21.0版本的突出特点之一是“安全脚本”。 Activiti用户指南中详细介绍了启用和使用此功能的方法 。 在这篇文章中&#xff0c;我将向您展示我们如何实现其最终实现以及它在幕后所做的事情。 当然&#xff0c;因为这是我通常的签名风格&#x…

C++ 11 深度学习(八)重定义override

1.动态联编&#xff0c;本质是在运行时多态的表现。 2.其本质是因为维护了一张虚函数表&#xff0c;虚函数表以链表的形式存在。每个结点存储了对象指针的地址&#xff0c;通过一个指针进行遍历索引。 #include <iostream> #include <armadillo> using namespace …

逻辑回归模型_联邦学习体系下——逻辑回归模型

联邦学习的体系我们在前期介绍过&#xff0c;这里我们简单回顾一下纵向联邦学习的定义&#xff1a;在两个数据集的用户重叠较多而用户特征重叠较少的情况下&#xff0c;将数据集按照纵向 (即特征维度)切分&#xff0c;并取出双方用户相同而用户特征不完全相同的那部分数据进行训…