善用工具_善用封盖

善用工具

法院关闭 不久前,在博客中 ,我解释了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,一经查实,立即删除!

相关文章

华三交换机怎么样?H3C交换机产品系列介绍!

H3C能够提供业界覆盖最全面的交换机产品。从园区到数据中心、盒式到箱式、从FE、GE到10G和100G,从L2到L4/7,从IPv4到IPv6,从接入到核心,用户都有最丰富的选择和灵活的组合。接下来我们一起来了解下华三交换机以及H3C交换机产品系列…

【渝粤教育】国家开放大学2018年春季 0300-21T图形创意 参考试题

编号:0300 座位号 2017~2018学年度第二学期期末考试 图形创意试题 2018年7月 一、设计制作题(100分) 以“君子兰”为造型元素进行视觉联想。根据自己的创意写出完整的图形创意方案。 内容要求及得分: 1.富有新意和趣味…

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

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

【渝粤教育】国家开放大学2018年春季 0632-21T老年保健按摩 参考试题

科目编号:0632 座位号 2017-2018学年度第二学期期末考试 老年保健按摩试题 2018年7月 一、名词解释(本大题共5小题,每小题4分,共计20分) 1.骨度分寸法: 2.三叉神经痛: 3.间接标志法&#xff…

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

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

Java中的WeakHashMap

Java中的WeakHashMap是中高级Java开发人员中非常流行的数据结构。 WeakHashMap类位于java.util包中。 这是一个Map实现,其中存储了对其键的弱引用。 当关联密钥丢失其所有活动的强引用和软引用时, WeakHashMap中的条目将自动删除。 在本文中&#xff0…

关于交换机的VLAN技术你了解多少?

VLAN(虚拟局域网)是对连接到的第二层交换机端口的网络用户的逻辑分段,不受网络用户的物理位置限制而根据用户需求进行网络分段。一个VLAN可以在一个交换机或者跨交换机实现。VLAN可以根据网络用户的位置、作用、部门或者根据网络用户所使用的…

【渝粤教育】国家开放大学2018年春季 3781-22T燃气燃烧技术与设备 参考试题

科目编号:3781 座位号 2017-2018学年度第二学期期末考试 燃气燃烧技术与设备 试题 2018年 7 月 一、填空题(本大题共6空,每空5分,共计30分) 1.完全预混燃烧条件:一是 ;二是 。 2&a…

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

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

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

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

【渝粤教育】国家开放大学2018年春季 7397-21T家庭教育咨询与辅导 参考试题

编号:7397 座位号 2017-2018学年度第二学期期末考试 家庭教育咨询与辅导 试题(开卷) 2018年7月 一、填空题(每空1分,共16分。错别字不给分。) 传统的家庭模式分为三类,分别是:核心…

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

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

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

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

【渝粤教育】国家开放大学2018年春季 8623-22T燃气行业法律法规 参考试题

科目编号:8623 座位号 2018-2019学年度第二学期期末考试 燃气行业法律法规 试题 2018年 7 月 一、填空题(本大题共6空,每空5分,共计30分) 1.县级以上地方人民政府应当建立健全 制度,组织编制燃…

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

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

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

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

【渝粤教育】国家开放大学2018年春季 8663-22T老年保健按摩 参考试题

科目编号:8663 座位号 2017-2018学年度第二学期期末考试 老年保健按摩试题 2018年7月 一、名词解释(本大题共5小题,每小题4分,共计20分) 1.老年病: 2.耳穴疗法: 3.拔罐疗法: 4.刮…

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

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

【物联网工厂大揭秘】电路板、数传模块 是怎么生产制造出来的?

【物联网工厂大揭秘】电路板、数传模块 是怎么生产制造出来的?

【渝粤教育】国家开放大学2018年秋季 0062-22T港台文学专题讲座 参考试题

试卷编号:0077 2018—2019学年度第一学期期末考试 古代汉语专题试题 2019年1月 一、名词解释(每小题5分,共20分) 1.金文2.表敬副词3.六书4.通假字1.“说文四大家”中注重归纳体例特…