变色龙功能

在《神秘博士》中,卡梅利恩(Kamelion)角色是可以采取任何形式的机器人。 据称,他们使用的物理道具非常麻烦,只有其创建者才能理解,而该创建者并没有帮助纠正它。

因此,Chamelion功能...

考虑以下代码:

 public List<Document> getAllDocuments(Request request, int userId, String field) { Query q = createQueryFrom(request); switch (field) { case "title" : q.addCriteria(Criteria.where( "title" ).is(request.getTitle()); break ; case "name" : q.addCriteria(Criteria.where( "name" ).is(request.getName()); break ;  default : throw new IllegalArgumentException( "Bad field: " + field); } return q;  } 

上面有很多事情。 让我们来了解它。 出现了某种请求,我们可以从中进行基本查询。 然后,根据调用方提供的字段,我们使用该字段向查询中添加条件,并将操作数从请求中拉出。

最重要的是,如果调用者提供了一个我们不知道如何查询的字段,我们就必须抛出一个错误。

这个功能怎么了?

我会告诉你怎么了...

这不是功能。 这是两个功能。 另请参阅两种音乐 。

调用代码可能如下所示:

 // one call site  getAllDocuments(request, id, "title" );  // another  getAllDocumetns(request, id, "name" ); 

我们正在使用字符串选择来控制单个函数的一半流程。

比这更糟的是……当某些调用者发明一个我们从未听说过的字符串时,我们需要抛出一个异常。

让我们再重构一下:

 public List<Document> getAllDocumentsByTitle(Request request, int userId) { Query q = createQueryFrom(request); q.addCriteria(Criteria.where( "title" ).is(request.getTitle()); return q;  }  public List<Document> getAllDocumentsByName(Request request, int userId) { Query q = createQueryFrom(request); q.addCriteria(Criteria.where( "name" ).is(request.getName()); return q;  } 

通过将其分为两个功能,它可以自我记录,易于遵循并且不需要处理流氓字符串。 它可能会稍微快一点,但这并不是真正的主要驱动力。

但是重复呢?

我怀疑变色龙功能的一种驱动程序是减少代码重复的错误尝试。 请注意,以上示例提供了在两个函数( createQueryFrom)中重用的代码示例,但每个函数中都有独立的逻辑。 它不是重复的代码。

我从中提取的示例可能最初有多行代码,现在我们看到createQueryFrom可能引起了对重复的恐惧,这反过来又造成了怪物。 坚持不懈地重构以减少正确的重复,这样的事情就不会发生。

翻译自: https://www.javacodegeeks.com/2019/08/chameleon-function.html

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

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

相关文章

E1常见问题介绍

1. E1与CE1是由谁控制&#xff0c;电信还是互连的两侧的用户设备&#xff1f;用户侧肯定要求支持他们,电信又是如何分别实现的&#xff1f; 答&#xff1a;首先由电信决定&#xff0c;电信可提供E1和CE1两种线路&#xff0c;但一般用户的E1线路都是CE1&#xff0c;除非你特别要…

MSTP多业务传输平台对设备接口的要求有哪些?

MSTP&#xff08;Multi-Service Transfer Platform&#xff09;&#xff08;基于SDH 的多业务传送平台&#xff09;是指基于SDH 平台同时实现TDM、ATM、以太网等业务的接入、处理和传送&#xff0c;提供统一网管的多业务节点。 MSTP的实现基础是充分利用SDH技术对传输业务数据…

jibx_Jibx Jersey2集成

jibxJersey2为Jackson和JAXB提供内置支持。 但是默认情况下不支持Jibx。 要将Jibx与Jersey2结合使用&#xff0c;我们将XML输入作为流&#xff0c;并在接收到请求之后&#xff0c;使用Jibx对其进行解析。 但是实际上&#xff0c;有更好的方法可以使用MessageBodyReader和Messag…

PCM复用设备的安装和使用注意事项

PCM设备在通信系统中的是一种很常用的设备&#xff0c;但是不少用户在购买了PCM设备后&#xff0c;都不懂怎么去安装使用PCM复用设备。下面&#xff0c;飞畅科技的小编来为大家详细介绍下PCM复用设备的安装和使用注意事项&#xff0c;一起来看看吧&#xff01; PCM复用设备的安…

PCM复用设备功能介绍

PCM设备功能主要分为四大部分&#xff1a;接入与复用、时隙交叉、2M线路保护、接口测试功能。接下来就由飞畅科技的小编来为大家详细介绍下PCM复用设备的功能&#xff0c;一起来看看吧&#xff01; PCM复用功能&#xff1a; 用户业务接入与复用是PCM设备最基本的功能&#xff…

对象和索引流

我本来要写一篇关于如何将流与每个元素的索引混合的文章&#xff0c;但是Baeldung上的人们已经很好地涵盖了这个主题 &#xff01; 鉴于我是他们编辑团队的一员&#xff0c;我为他们/我们感到自豪。 有趣的是&#xff0c;特别是Streams中的Java函数式编程如何使我们脱离了一些…

PCM复用设备主要传输什么业务?

PCM即脉冲编码调制&#xff0c;在通信系统中完成将语音信号数字化功能。PCM的实现主要包括三个步骤完成&#xff1a;抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表示。 1、 抽样&#xff1a;所谓抽样&#xff0c;就是对模拟信号进行周期性扫描&…

Pcm设备2M通道,E1的基础知识介绍

Pcm设备2M通道在业内常简述为E1&#xff0c;E1这个词在通信行业起着非常重要的作用&#xff0c;相信刚接触这个词的人必定会感到陌生。接下来就由飞畅科技的小编来为您详细的介绍一下E1的基础知识。 一、E1概述 E1是ITU-T制定并由欧洲邮政与电信协会&#xff08;CEPT&#xff…

数据结构栈的知识_数据知识栈

数据结构栈的知识并发不适合胆小者 我们都知道并发编程很难正确实现。 这就是为什么在执行线程任务之后要进行大量的设计和代码审查会议。 您永远不会将并发问题分配给经验不足的开发人员。 仔细分析问题空间&#xff0c;提出设计&#xff0c;并记录和审查解决方案。 这就是通…

PCM设备E1保护切换功能介绍

脉冲编码调制&#xff08;PulseCodeModulation&#xff09;&#xff0c;简称PCM。是对连续变化的模拟信号进行抽样、量化和编码产生的数字信号。PCM的优点就是音质好&#xff0c;缺点就是体积大。PCM可以提供用户从2M到155M速率的数字数据专线业务&#xff0c;也可以提供话音、…

在Eclipse中使用Java 12

1.安装JDK 12 链接&#xff1a; https &#xff1a; //www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html 2.安装Eclipse 4.11 链接&#xff1a; https &#xff1a; //download.eclipse.org/eclipse/downloads/drops4/R-4.11-201903070500 …

PCM设备的作用,为什么要选用PCM设备?

PCM设备在通信系统中是利用E1&#xff08;2M&#xff09;线路进行传输多种业务数据的基群设备。但是不少用户在开始使用之前&#xff0c;并不能确定PCM能否满足他的需求&#xff0c;也不清楚有PCM这样的一个名词。接下来飞畅科技的小编来为大家介绍下PCM设备的作用&#xff0c;…

RS485光纤中继器有哪些优缺点?

信号在传输过程中会不断衰减&#xff0c;为了不让信号衰减对通信产生影响&#xff0c;产生了中继器。仅做放大信号用&#xff0c;把信号传导偏远的地方。 中继器又被称为转换器或放大器&#xff0c;执行物理层协议&#xff0c;负责第一层&#xff08;物理层&#xff09;的数据中…

intellij注释模板_IntelliJ中的实时模板

intellij注释模板如上所述这里 &#xff0c;的IntelliJ的现场模板可以让你轻松地插入预定义的代码片段到你的源代码。 我在下面发布了一些我最常用的模板&#xff0c;链接到我在GitHub上的模板文件的完整列表&#xff08;作为设置新IntelliJ环境时的参考&#xff09;&#xff…

485转换器产品功能特点及技术参数介绍

485转换器主要的作用是将单端的RS-232信号转换为平衡差分的RS-485或RS-422信号。RS-485、RS-422自动识别功能&#xff0c;使用更加简单。接下来就由飞畅科技的小编来为大家详细介绍下485转换器的产品功能特点及技术参数&#xff0c;一起来看看吧&#xff01; 485转换器产品特点…

无浪费编码

本文介绍了如何通过减少软件堆栈中的浪费来高效解决有意义的事件处理问题。 Java通常被视为无法在低内存环境中高效运行的内存猪。 目的是证明许多人认为不可能的事情&#xff0c;有意义的java程序几乎可以在没有内存的情况下运行。 示例流程 在Java的单个线程上&#xff0c;…

485光纤转换器产品分类介绍

485转换器用于点对点、点对多点通讯、工业控制自动化、道路交通控制自动化、智能卡、考勤、门禁、售饭系统、工业集散分布系统、闭路监控、安防系统、POS系统、楼宇自控系统、自助银行系统。接下来就由飞畅科技的小编来为大家详细介绍下485转换器的分类&#xff0c;一起来看看吧…

RS232与串口通信的4个注意事项详解

RS232和串口通信&#xff0c;用于串口设备的数据采集软件&#xff0c;包括仪表、天平、秤或任何RS232仪器。WinWedge直接将数据捕获到Excel、Access或任何Windows应用程序或网页。它甚至可以从COM端口发送命令&#xff0c;因此您可以通过热键&#xff0c;按钮或DDE控制您的设备…

RS485集线器知识详解

集线器的英文名称就是我们通常见到的“HUB”&#xff0c;英文“HUB”是“中心”意思&#xff0c;集线器的主要功能是对接收到的信号进行再生整形放大&#xff0c;以扩大网络的传输距离&#xff0c;同时把所有节点集中在以它为中心的节点上。 集线器工作原理 它工作于OSI参考模…

HttpMate简介

没有人愿意编写不良代码。 没有人会想到“我要创建最纠结和最不可读的代码&#xff0c;并确保它不可扩展且难以修改或浏览”&#xff0c;从而开始了应用程序开发。 首先要有良好的意愿&#xff0c;甚至可能要牢记所有Clean Code和SOLID原则。 但是&#xff0c;折衷方案通常以所…