首页 > 基础资料 博客日记
【重构的哲学】这个方法调用,我们怎么重构?AI不一定能告诉你!
2024-04-02 09:30:02基础资料围观206次
本篇文章分享【重构的哲学】这个方法调用,我们怎么重构?AI不一定能告诉你!,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
先上代码。
public Result<RechargeResultVO> queryOrder(String orderNo) { JSONObject json = ... // 查询外部通道 RechargeResultVO rechargeResultVO = new RechargeResultVO(); rechargeResultVO.setOrderNo(json.get("sporder_id")); rechargeResultVO.setChannelOrderNo(json.get("orderid")); rechargeResultVO = checkResult(json, rechargeResultVO); return Result.success(rechargeResultVO); } public RechargeResultVO checkResult(JSONObject json, RechargeResultVO rechargeResultVO) {
// 如果充值成功将为1 撤销(充值失败)为9 充值中为0 switch (json.get("game_state")){ case "1" : rechargeResultVO.setOrderStatus(IPSFStatusEnum.SUCCESS); break; case "9" : rechargeResultVO.setOrderStatus(IPSFStatusEnum.FAIL); break; default: rechargeResultVO.setOrderStatus(IPSFStatusEnum.PROCESSING); break; } return rechargeResultVO; }
这段代码的逻辑并不复杂,理解起来也不难。不过,这里面确实存在着一些值得重构的事项。
重构项1:
checkResult 的第2个参数 rechargeResultVO 是引用类型。
重构项2:
从 checkResult 的方法实现来看,它的职责是 根据 game_state 的不同情况,来给 rechargeResultVO 的 orederStatus 赋值。因此,可以重命名为 convertStatus,以更准确地反映其功能。
重构项3:
关于 checkResult 的第1个参数, 结合方法实现可以看出来, 并不需要传一个json对象, 而是 gameState 变量 就足够了。
经过以上3项分析,重构后的代码如下。
public Result<RechargeResultVO> queryOrder(String orderNo) { JSONObject json = ... // 查询外部通道 RechargeResultVO rechargeResultVO = new RechargeResultVO(); rechargeResultVO.setOrderNo(json.get("sporder_id")); rechargeResultVO.setChannelOrderNo(json.get("orderid")); convertStatus(json.get("game_state"), rechargeResultVO); return Result.success(rechargeResultVO); } public void convertStatus(String gameState, RechargeResultVO rechargeResultVO) {
// 如果充值成功将为1 撤销(充值失败)为9 充值中为0 switch (gameState){ case "1" : rechargeResultVO.setOrderStatus(IPSFStatusEnum.SUCCESS); break; case "9" : rechargeResultVO.setOrderStatus(IPSFStatusEnum.FAIL); break; default: rechargeResultVO.setOrderStatus(IPSFStatusEnum.PROCESSING); break; } }
关于这段代码,你觉得还有哪些地方需要重构的呢?欢迎交流。
是的。上面代码还可以提出重构建议:convertStatus 可以不需要 第2个参数。 而是 直接返回 转换后的状态值。另外,convertStatus 可以是 static。这时,重构后的代码如下。是不是更棒了呢!
public Result<RechargeResultVO> queryOrder(String orderNo) { JSONObject json = ... // 查询外部通道 RechargeResultVO rechargeResultVO = new RechargeResultVO(); rechargeResultVO.setOrderNo(json.get("sporder_id")); rechargeResultVO.setChannelOrderNo(json.get("orderid")); rechargeResultVO.setOrderStatus(convertStatus(json.get("game_state"))); return Result.success(rechargeResultVO); } public static IPSFStatusEnum convertStatus(String gameState) {
// 如果充值成功将为1 撤销(充值失败)为9 充值中为0 switch (gameState){ case "1" : return IPSFStatusEnum.SUCCESS; case "9" : return IPSFStatusEnum.FAIL; default: return IPSFStatusEnum.PROCESSING; } }
关于这段代码,你觉得还有哪些地方需要重构的呢?欢迎交流。
文章来源:https://www.cnblogs.com/buguge/p/18109272
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: