1 momuou OP // 业务类型 if (StringUtils.isNotBlank(countTypeId) && !"null".equals(countTypeId)) { paramMap.put("countTypeId", countTypeId.trim()); // 日期 if (StringUtils.isNotBlank(dealDate) && !"null".equals(dealDate)) { paramMap.put("dealDate", dealDate.trim()); //地市编码 if (StringUtils.isNotBlank(regionCode) && !"null".equals(regionCode)) { paramMap.put("regionCode", regionCode.trim()); if (StringUtils.isNotBlank(payType) && !"null".equals(payType)) { //-支付类型( 0 待确认 1 通过 2 不通过 paramMap.put("payType", payType.trim()); try { int i = dataRecountService.updateDataPayType(paramMap); if (i > 0) { result.put("status", "1"); result.put("msg", "提交成功"); } } catch (Exception e) { logger.error(e.getMessage(), e); result.put("msg", "网络异常,请稍后再尝试。"); } } else { result.put("msg", "选择的支付类型有误,请稍后重试"); } } else { result.put("msg", "请选择确切地市进行查询后再进行审核"); } } else { result.put("msg", "请选择确切日期进行查询后再进行审核."); } } else { result.put("msg", "业务类型不明,请联系管理员"); } |
![]() | 2 he583899772 2018-12-24 15:06:50 +08:00 一大推 if else 看到就头痛 |
![]() | 3 wsyzzz 218-12-24 15:08:52 +08:00 跑一下看看报错呗,,看文本调试也太头疼了 |
![]() | 4 jingyulong 2018-12-24 15:10:17 +08:00 现在哪里有报错吗? |
![]() | 5 ukipoi 2018-12-24 15:13:25 +08:00 countTypeId = " null"; 这样子是不是就不符合要求了 |
![]() | 6 Vegetable 2018-12-24 15:14:16 +08:00 不是很合理哦,你上边是个 if,是不是"null "都能过? 本身这个数据是哪来的我不要清楚,不过你是不是应该在 trim 后判空? |
![]() | 8 jcsmallming 2018-12-24 15:15:27 +08:00 ![]() 是有报错还是运行结果不符合预期?你直接贴这一段代码上来没有补充说明真的很难看啊 |
![]() | 9 misaka19000 2018-12-24 15:19:05 +08:00 ![]() 这个代码写的好烂,建议先重构下 |
11 nananqujava 2018-12-24 15:25:02 +08:00 我靠 又是这种箭头型代码,这种代码也能通过审核? |
12 pipicat 2018-12-24 15:47:31 +08:00 每次校验的方法 StringUtils.isNotBlank(value) && !"null".equals(value) 应该可以合并成一个函数吧。而且代码都是有规律的,可以用反射字段名统一添加吧,搜了一下 @jorneyr 说的 hibernate validator 应该可以,原理应该类似 |
![]() | 13 Chemist 2018-12-24 15:47:36 +08:00 这个令人头痛的代码本身就是“异常” |
15 momuou OP @jcsmallming 这种写法肯定是不符合预期的,其实一直都是写 if()else{return}这种的,可是参数多了就觉得麻烦,而且最后还是会走到事务里面去. |
16 momuou OP @misaka19000 这本身就是一段烂代码,就是想请教一下你怎么重构,瞎子都知道这种代码难维护,可是你要怎么写才能符合这种写法又优雅呢? |
17 momuou OP @kyuuseiryuu 就是本着我写着爽,维护的人想砍我的心态。。所以才放上来的。 |
![]() | 19 james2013 2018-12-24 16:14:42 +08:00 问题: 1)判断为空完善,应改为!"null".equals(countTypeId.trim()) 2)if else 嵌套太深,如下减少层级到 1 层: if (!StringUtils.isNotBlank(countTypeId)) { return; } if (!StringUtils.isNotBlank(dealDate)) { return; } ... |
20 momuou OP 好吧,大背景就是本来写了一段自我感觉良好的代码,可是硬盘丢失了,代码只能重写,却写出这种后人难以维护的代码,感觉不太好,所以发上来请教一下各位。。刚刚上了个厕所,好像又记起来之前怎么写的了。 if (StringUtils.isBlank(countTypeId) || "null".equals(countTypeId)) { // 业务类型 result.put("msg", "业务类型不明,请联系管理员"); } else if(StringUtils.isBlank(dealDate) || "null".equals(dealDate)){ // 日期 result.put("msg", "请选择确切日期进行查询后再进行审核."); }else if(StringUtils.isBlank(regionCode) || "null".equals(regionCode)){ //地市编码 result.put("msg", "请选择确切地市进行查询后再进行审核"); }else if(StringUtils.isBlank(payType) || "null".equals(payType)){ //-支付类型( 0 待确认 1 通过 2 不通过 result.put("msg", "选择的支付类型有误,请稍后重试"); }else{ paramMap.put("countTypeId", countTypeId.trim()); paramMap.put("dealDate", dealDate.trim()); paramMap.put("regionCode", regionCode.trim()); paramMap.put("payType", payType.trim()); int i = dataRecountService.updateDataPayType(paramMap); if (i > 0) { result.put("status", "1"); result.put("msg", "提交成功"); } } return result; |
21 annielong 2018-12-24 16:21:02 +08:00 反正个人写条件两种用 if,三种以上就换 switch,不过返回值提示这种可以定义字典,或者数组,可以统一维护 |
23 momuou OP 不会贴图,所以没什么贴上来没什么格式。。感谢提建议的各位。 |
24 pipicat 2018-12-24 18:24:29 +08:00 ![]() 写了一段,供你参考。 public class Test { class Model { @Warning("业务类型不明,请联系管理员") public String countTypeId; @Warning("请选择确切日期进行查询后再进行审核") public String dealDate; @Warning("请选择确切地市进行查询后再进行审核") public String regionCode; @Warning("选择的支付类型有误,请稍后重试") public String payType; } public void Test(){ Model model = new Model(); HashMap<String,String> result = new HashMap<>(); HashMap<String,String> paramMap = new HashMap<>(); Field[] declaredFields = model.getClass().getDeclaredFields(); boolean pass = true; for (Field field:declaredFields){ if (field.getAnnotation(Warning.class)!=null){ field.setAccessible(true); try { Object o = field.get(model); if (!isVaild(String.valueOf(o))) { pass = false; result.put(field.getName(),field.getAnnotation(Warning.class).value()); break; } else { paramMap.put(field.getName(),String.valueOf(o).trim()); } } catch (IllegalAccessException e) { e.printStackTrace(); } } } if (pass) { try { int i = dataRecountService.updateDataPayType(paramMap); if (i > 0) { result.put("status", "1"); result.put("msg", "提交成功"); } } catch (Exception e) { logger.error(e.getMessage(), e); result.put("msg", "网络异常,请稍后再尝试。"); } } else { } } public boolean isVaild(String str){ return StringUtils.isBlank(str) && !"null".equals(str); } } @Target(FIELD) @Retention(RUNTIME) @interface Warning{ String value() default ""; } 具体细节可能还要调一下。 |
25 lihongjie0209 2018-12-24 18:38:26 +08:00 |
26 lihongjie0209 2018-12-24 19:02:12 +08:00 |
27 lihongjie0209 2018-12-24 19:07:29 +08:00 ![]() |
28 laoyur 2018-12-24 19:07:36 +08:00 看到这样排版还肯帮忙的,是真的热心肠了 |
29 lihongjie0209 2018-12-24 19:10:03 +08:00 @laoyur 主要是想试一下 gif 录制工具 还有 在 v2 回复图片, 后者看来失败了 |
![]() | 30 devilyaos 2018-12-24 21:28:18 +08:00 via iPhone counttypeid 为 null (有空格)会进下面的逻辑吧?此时应该条件匹配不上?或者 null 是大写,大小写匹配可以用 equalsignore 嘛…… |
31 iceheart 2018-12-25 08:42:27 +08:00 via Android ![]() //抛块砖头,帮你重构了一下,java 语法不太熟,将就着写吧 //重复的动作首先要封装一下 bool check(string typeName string typeValue) { if (StringUtils.isBlank(typeValue) || "null".equals(typeValue)) { return false; } paramMap.put(typeName, typeValue.trim()); return true; } ... //try catch 可以简化分支处理 try { if (!check(countTypeId)) throw Exception("your message"); if (!check(dealDate)) throw Exception("your message"); if (!check(regionCode)) throw Exception("your message"); if (!check(payType)) throw Exception("your message"); int i = 0; try { i = dataRecountService.updateDataPayType(paramMap); }catch (Exception e) { logger.error(e.getMessage(), e); throw Exception("网络异常,请稍后再尝试。" ); } if (i > 0) { result.put("status", "1"); result.put("msg", "提交成功"); } }cache(Exception e) { result.put(e.getMessage()); } |
33 momuou OP @lihongjie0209 谢谢 |
36 tingfang 2018-12-25 09:34:51 +08:00 这种 ifelse 建议使用卫语句。 |
37 tingfang 2018-12-25 09:36:31 +08:00 if(!conditionA){ return; } if(!conditionB){ return; } if(!conditionC){ return; } ... return; |
38 icop 2018-12-25 09:43:54 +08:00 debug 不行吗? IDEA 的 DEBUG 啊。 |
39 aa514758835 2018-12-25 09:56:59 +08:00 这是 java 吗~ 我看不懂 |
40 wuchenl 2018-12-25 10:12:35 +08:00 ![]() |
![]() | 41 zhaogaz 2018-12-25 10:44:15 +08:00 ![]() 你把以上内容封装成一个对象,然后用 valid 验证的框架去做验证。验证内容都注解写就好了。。。 |