先看下面的代码
@PostMapping("delete")
public BaseResponseDTO delete(UserAuthInfo user, @RequestBody BaseInfoDTO in) {
boolean flag = networkLibraryServiceDomain.delete(user, in);
if (flag) {
return BaseResponseDTO.success();
} else {
return BaseResponseDTO.fail("500","操作失败");
}
}
能看出什么问题?
flag不能表达具体的异常,统一做了一个操作失败的提醒,而这个提醒没有任何实际意义。
。
在go项目中,有一个我印象深刻的点,在go中因为要使用到上下文去做sentinel,在操作数据库的时候会绑定上下文,所以出现了上下文导出扩散的问题,但是也带来了好处,那就是随时可以进行请求的返回响应。就好比java的response扩散到所有的方法中,随时可进行请求的响应,但是带来的坏处很明显,那就是返回结构可能可以随意改动。所以java在规范方面就可圈可点了,必须确定的返回对象。
。
回到这个判断flag的问题上,这个flag跟mybatis-plus的操作很相似,返回boolean或者返回int,这个时候需要去判断是否执行成功,不成功必须返回异常,否则事务不会进行回滚。所以这个返回应该放到应用层或者业务层中,在底层对应异常进行处理,当然啦,不处理,这里直接返货void就可以,底层统统按照抛异常处理。