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 2018-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 1
是有报错还是运行结果不符合预期?你直接贴这一段代码上来没有补充说明真的很难看啊
|
9
misaka19000 2018-12-24 15:19:05 +08:00 2
这个代码写的好烂,建议先重构下
|
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
kyuuseiryuu 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 1
写了一段,供你参考。
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 1
|
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 2
//抛块砖头,帮你重构了一下,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 1
|
41
zhaogaz 2018-12-25 10:44:15 +08:00 1
你把以上内容封装成一个对象,然后用 valid 验证的框架去做验证。验证内容都注解写就好了。。。
|