上方蓝色“程序员追风”,选择“设为星标”
回复“资料”获取整理好的面试资料
原文:juejin.cn/post/7357172505961578511
前言
见过几千行代码的 controller吗?我见过。
见过全是 try catch 的 controller 吗,我见过。
见过全是字段校验的 controller 吗,我见过。
见过全是业务代码的 controller 吗?不好意思,我们公司很多业务写在 controller 的。
看见这些我真的血压高。
正文
不优雅的 controller
@ResponseBody
@RestControllerAdvice
public class ExceptionHandlerAdvice {
protected Logger logger = LoggerFactory.getLogger(getClass());
@ExceptionHandler(MethodArgumentNotValidException.class)
public CommonResult<Object> handleValidationExceptions
(MethodArgumentNotValidException ex) {
logger.error("[handleValidationExceptions]", ex);
StringBuilder sb = new StringBuilder();
ex.getBindingResult().getAllErrors().forEach(error -> {
String fieldName = ((org.springframework.validation.FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
sb.append(fieldName).append(":").append(errorMessage).append(";");
});
return CommonResult.error(sb.toString());
}
/***处理系统异常,兜底处理所有的一切*/
@ExceptionHandler(value = Exception.class)
public CommonResult<?> defaultExceptionHandler
(Throwable ex) {
logger.error("[defaultExceptionHandler]", ex);
//返回ERROR CommonResult
return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMsg());
}
}
就这么多,搞定,这样就拥有了漂流优雅的 controller 了
在日常开发中,还有那些血压飙升瞬间
我拿出下图阁下如何面对

这个阁下又如何面对,我不说,你能知道这个什么吗【狗头】

总结
不是很明白为什么有些喜欢在 controller 写业务逻辑的,曾经有个同事问我(就是喜欢在 controller 写业务的),你这个接口写在那里,我需要调一下你这个接口。我满脸问号??不是隔壁的模块吗,为什么要调我的接口?直接引用的我的 service 去调方法就好了。
这个就是痛点,各写各的,冗余代码一堆。
曾经看到一个同事写一个保存的方法,虽然逻辑挺多,我滑动了好久都还没有方法还没有结束。一个方法整整几百行……
看过 spring 源码都知道,spring 源码难啃,就是因为 spring 无限往下套娃,基本每个方法干每个方法的事情。比如我保存用户时,就只是保存用户,至于什么校验丢给校验的方法处理,什么发送消息丢给发送消息处理,这些就不能耦合在一起。
对于看到一些 if 下面一丢逻辑,然后 if 再一丢逻辑,看代码时很多情况不需要知道这个逻辑怎么实现的,知道入参出参就大概这里做什么了。即使想知道详细情况点进去就知道了。突出这个当前方法要做的事情就好了。
阿里的开发手册就推荐一个方法不能超过 80 行,超过可以根据业务具体调整一下。
你在看吗
本篇文章来源于微信公众号: 程序员追风
微信扫描下方的二维码阅读本文

Comments NOTHING