善用工具_善用封盖

善用工具

法院关闭 不久前,在博客中 ,我解释了Groovy中Closure的含义。 这篇博客文章将解释一个使用它们的好例子。 最近,我发现自己不得不为服务AJAX请求的大量后端Controller API编写相同的异常处理逻辑。 就像这样:

class ApiRugbyPlayerController {JSON getPlayerStats() {try {...// invoke business service method to get player stats} catch (ServiceException serviceException) {// don't care too much about this.// log and move on...          } catch (SessionException sessionException) {// clear out session cookies...// send 403 to client...} catch (Exception ex) {throw new ApiException(ex)}}JSON updatePlayerStats() {try {...// invoke business service method to update player stats} catch (ServiceException serviceException) {// don't care too much about this.// log and move on...          } catch (SessionException sessionException) {// clear out session cookies...// send 403 to client...} catch (Exception ex) {throw new ApiException(ex)}}JSON queryPlayerStats(){try {...// invoke business service method to query player stats} catch (ServiceException serviceException) {// don't care too much about this.// log and move on...          } catch (SessionException sessionException) {// clear out session cookies...// send 403 to client...} catch (Exception ex) {throw new ApiException(ex)}}
}

可以看出,这里有一些代码重复。 本着DRY的精神(不要重复自己),最好只定义一次此异常处理逻辑,然后重新使用它。 因此,我定义了以下实用程序方法,该方法实现了异常处理模式并采取了关闭操作,该闭包将为其执行异常处理。

private JSON withExceptionHandling(Closure c) {try {...c.call();} catch (ServiceException serviceException) {// don't care too much about this. // log and move on...           } catch (SessionException sessionException) {// clear out session cookies...// send 403 to client ...} catch (Exception ex) {throw new ApiException(ex)}}

我们可以使用{}将代码封闭在Groovy中,以使其成为闭包。 这意味着我可以将Controller方法中的逻辑转换为Closures,并将其传递给Utility方法。 而且当我将其传递给实用程序方法时,我甚至不需要将其传递给()内部,因为Groovy并不使您满意。 因此,这意味着我可以消除所有常见的异常处理,消除代码膨胀,而且我的Controller API更整洁。

class ApiRugbyPlayerController {JSON getPlayerStats() {withExceptionHandling {...// invoke business service method to get player stats} }JSON updatePlayerStats() {withExceptionHandling {...// invoke business service method to update player stats} }JSON queryPlayerStats(){withExceptionHandling {...// invoke business service method to query player stats} }private JSON withExceptionHandling(Closure c) {try {...c.call();} catch (ServiceException serviceException) {// don't care too much about this. // log and move on...           } catch (SessionException sessionException) {// clear out session cookies...// send 403 to client ...} catch (Exception ex) {throw new ApiException(ex)}}
}

所以我们去了。 我们坚持DRY原则,避免了代码膨胀,并为我们的异常处理提供了专门的场所,确信它可以始终如一地实现。 Groovy闭包的这个例子有点像,但是就像JavaScript中的第二次调用一样。 如果我们想用Java做类似的事情,那将涉及很多代码。 我们可以使用类似命令模式的东西,并将它们的执行放入异常处理逻辑中。 您将具有更多的去耦功能,但是您将拥有更多的代码。 或者,您可以使所有AJAX API输入一个通用方法(例如Front Controller),但在该处处理通用异常。 同样,可能,但仅需更多代码。 在下一次之前,请多保重。

参考: 都柏林技术博客博客上的JCG合作伙伴 Alex Staveley 很好地使用了闭包 。

翻译自: https://www.javacodegeeks.com/2014/03/good-use-of-closures.html

善用工具

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

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

相关文章

【指南】远程抄表系统(AMR/AMI)中无线模块选型

概述 远程抄表系统是为提高水表、电表等能耗参数的综合计费管理水平而设计的新兴技术。它以全自动的抄表方式取代了传统的人工抄表方式,和同类抄表系统相比,具有网络结构自适应、免调试、免维护、运行稳定、方便扩展的特点。该系统采用先进的无线网络数…

ZigBee网络角色 拓扑结构 无线模块组网典型应用

01 简介 ZigBee 是一种短距离,低功耗,低速率,低成本的一种无线自组网通信技术。 02 网络特点 ZigBee 网络有如下特点:低功耗,自组网,多跳路由,高安全,抗干扰能力强 03 ZigBee 网络…

什么是电源正激和反激? 正激和反激有什么区别特点?如何快速区分

正激和反激是两种不同的开关电源技术 正激式开关电源 01 简介 正激式开关电源是指使用正激高频变压器隔离耦合能量的开关电源,正激式开关电源中结构比较复杂,输出功率高,适用于低压,大电流(100W-300W&…

Time-of-Flight技术在距离测量和定位上的应用

LoRa技术是Semtech公司采用并且推广的的一种基于扩频技术的超远距离无线传输方案,属于低功耗广域网(Low Power Wide Area Network,LPWAN)通信技术中的一种。LoRa技术不再受限于传输距离和功耗的折衷考虑,为用户们提供了…

交换机的RJ45端口和SFP端口有什么区别?

现如今,随着人们对网络需求的日益增长,数据中心或者服务器机房内的网络升级已经刻不容缓,因此,千兆以太网已经越来越普遍。众所周知,目前市场上大家使用的千兆以太网交换机一般有两种端口:RJ45端口和SFP端口…

LoRa、蓝牙、技术在电子显示牌上的应用

概述 随着电子显示牌技术的不断发展,控制方式越来越多样化,价格越来越低廉,使得其应用领域越来越广泛(如:高速公路的指示牌,车站的指示牌,运动场上的比分牌,街头的广告牌等等&#x…

java ee 7 新_Java EE 7:新功能???

java ee 7 新我有点“晚点”,可以这么说……就Java EE 7的 “博客”而言。 自2013年6月发布以来,已经差不多10个月了 ,但是它仍然相对较新。 就我个人而言,仅仅是因为它的易用性和所购买的功能范围之广,我对此感到很兴…

【应用案例】蓝牙BLE实现防丢器的方法

概述 随着科学技术的发展,越来越多的智能可穿戴设备出现在我们的眼前,智能手环,智能眼镜、智能防丢器等,防丢器就可以很方便的给出提醒。 目前防丢器的种类有 蓝牙防丢器GPS防丢器RFID防丢器WIFI防丢器等 本文主要讲解蓝牙防丢…

PoE交换机为什么值得你选择?

PoE交换机的应用范围很广泛,它与普通的交换机有什么区别呢?PoE交换机为什么值得你选择呢?接下来飞畅科技的小编就来为大家详细介绍下,一起来看看吧! PoE交换机除了具备普通交换机的功能外,还具备有PoE供电…

工业交换机的定义和应用

工业交换机定义: 交换机英文名称为Switch,也称为交换式集线器,交换机是构建网络平台的“基石”,又称网络开关它是一种基于MAC地址(网卡的硬件标志)识别,能够在通信系统中完成信息交换功能的设备。其工作原理可以简单地…

NB-IoT与LoraWan技术分析与前景展望

物联网的快速发展对无线通信技术提出了更高的要求,专为低带宽、低功耗、远距离、大量连接的物联网应用而设计的LPWAN(low-power Wide-Area Network,低功耗广域网)也快速兴起。物联网应用需要考虑许多因素,例如节点成本,网络成本&a…

ZigBee自组网地址分配与路由协议技术详解

1. ZigBee简介 ZigBee是基于IEEE802.15.4标准的低功耗局域网协议。根据国际标准规定,ZigBee技术是一种短距离、低功耗的无线通信技术。 ZigBee协议从下到上分别为物理层(PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理层&#xff…

怎么样解决小交换机引起的路由环路故障?

一般引起路由故障的原因有很多,例如管理不善,私自接一些交换机、路由器等。那么,如何解决小交换机引起的路由环路故障?接下来我们就跟随飞畅科技的小编一起来详细看看吧! 环路会导致交换机性能衰竭,无法交换发送数据…

java ee maven_针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom...

java ee maven为什么呢 很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题。 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务器上的部署并细化我的配置。 Maven对于新来者来说可能会有陡峭…

什么是SFP光模块?光模块知识介绍!

光模块(optical module)由光电子器件、功能电路和光接口等组成,光电子器件包括发射和接收两部分。简单的说,光模块的作用就是光电转换,发送端把电信号转换成光信号,通过光纤传送后,接收端再把光信号转换成电信号。常见…

中继(洪泛中继、定向中继)在无线通讯中的应用

无线中继,即中继节点在无线网络中起到中继的作用,能实现信号的中继和放大,从而延伸无线网络的覆盖范围。就中继的运行机制而言,中继可分为洪泛中继、定向中继。 洪泛中继,是指中继设备在任何时刻收到的任意数据包&…

Jakarta EE 8状态

遵循Jakarta EE的您可能知道即将发布的Jakarta EE 8在功能上将与Java EE 8等效。其原因是我们想证明从Oracle的传输是完整的,并且我们能够产生流程,规范,测试套件以及通过Eclipse Foundation的兼容实现。 到目前为止, Eclipse Gl…

光模块的正确安装方法和使用须知

光模块(optical module)由光电子器件、功能电路和光接口等组成,光电子器件包括发射和接收两部分。简单的说,光模块的作用就是光电转换,发送端把电信号转换成光信号,通过光纤传送后,接收端再把光信号转换成电信号。那么…

大功率无线数传设备不接天线有何影响?

从无线传输技术诞生以来,给人们也是带来了极大的方便,与此同时和无线设备密切和分不开的设备就是天线了。天线在无线设备中发挥了极大的作用。在以前的无线电台,在电影上面看过的都是很熟悉, 如图1.1所示,这种无线电台…

光模块该如何使用,光模块的使用方法介绍!

业内说的光模块,特指可热插拔的小型封装光模块,就是用在设备端口上的、可以在运行时进行热插拔的光模块,主要用来将设备(一般指的是交换机或者路由器设备)中的电信号转换成光信号。那么光模块该如何使用呢?…