大佬们, 请教一下关于 Java 后端 Service 层

60 天前
 vyuai
https://imgur.com/LRbzXFg
https://imgur.com/K3thJ6I
https://imgur.com/LyiGbsm
1.大佬们, 这样理解对嘛, 第二张图是我思考的, 开发 Service 需要考虑调用的情况嘛, 虽然 Controller 层进行了 @Valid, 如果自己或者别人直接调用 roleId 和 employeeIdList 还是会出现空指针, 是否还需要加上校验呢, 一般企业开发需要考虑到 service 自己和别人调用的情况嘛
1892 次点击
所在节点    Java
13 条回复
vuevue
60 天前
为什不问问神奇 gpt 呢
wxw752
60 天前
我是加的,要防着同事一手
iintothewind
60 天前
public 方法, 对传入参数要做防御性判断, 并打印 log.
看你代码, 好像这两个都没做, 这在大厂恐怕不能通过 review.

上线出问题你都不知道是不是你代码自己的问题, 还是别人传入参数的问题.
vyuai
60 天前
@wxw752 大佬, 如果加上校验, 返回什么比较合适呢, 错误提示嘛
/**
* 批量删除角色员工关系
*
* @param roleEmployeeUpdateForm
* @return
*/
public ResponseDTO<String> batchDeleteRoleEmployee(RoleEmployeeUpdateForm roleEmployeeUpdateForm) {
if (roleEmployeeUpdateForm.getRoleId() == null || CollectionUtils.isEmpty(roleEmployeeUpdateForm.getEmployeeIdList())) {
ResponseDTO.error(UserErrorCode.PARAM_ERROR, "参数错误");
}
roleEmployeeDao.batchDeleteRoleEmployee(roleEmployeeUpdateForm.getRoleId(), roleEmployeeUpdateForm.getEmployeeIdList());
return ResponseDTO.ok();
} 类似这样嘛
vyuai
60 天前
@vuevue 问了, 但是很多场景不太理解, 有些也是看情况而定
vyuai
60 天前
@iintothewind 感谢大佬, 看来还是要考虑各个方面问题
iintothewind
60 天前
看上下文以及自己需求, 如果允许代码 break, 就抛 exception,
如果还有返回那就自己 handle, 返回约定的结果,
但重要是的是打印 log, 防止扯皮,
在大厂, 上线非常重要的是打印 log, 要不然你自己说不清楚, 出问题, 锅就是你的.
vyuai
60 天前
@iintothewind 日志的话, 一般打印错误日志和成功日志嘛, 如果发生异常有全局异常处理类做日志打印, service 层还需要打印吗
vyuai
60 天前
@iintothewind 好的, 感谢感谢
iintothewind
60 天前
你这个真的受 spring 影响太深了, 你还指望全局 handler 给你兜着啊?

那 Error Handling 得做的多糟糕才跑到做全局 handling,
所谓的全局 error handling 难道不是就打印一下啥都不做吗? 跑那去你业务代码上下文早没了, 你还能看到啥啊?


public 方法, 入口参数肯定要打印 log 的, 成功和失败看情况啊, 失败的上下文 log 更重要.
vyuai
60 天前
@iintothewind 明白了, 日志是不是一般在 service 层打印, 感觉 controller 好像打印入口参数好像更准确, 可是我最近在学习一个开源项目(SmartAdmin)
看他们规范说 controller 层
1. 不做任何的业务逻辑操作
2. 不做任何的参数、业务校验,参数校验只允许使用 @Valid 注解做简单的校验
3. 不做任何的数据组合、拼装、赋值等操作
4. 只能在 controller 层获取当前请求用户,并传递给 service 层。

主要为了学习代码编码风格和规范, 看哪些开源项目比较好啊, 或者看什么别的东西

目前看的是 SmartAdmin 这个开源项目学习, 大佬有了解的嘛, 看哪位作者的风格比较好呢, 若依实在不喜欢, 目前觉得这个 SmartAdmin 对我帮助很大
iintothewind
60 天前
我不知道, 反正学习打 log 在大厂爬屎山第一课, 出了不要暴露 PII 信息之外, 没有什么不能打的, 毕竟是为了防止自己背锅的.
其它的我不知道, 代码风格每个团队不同, 没有对错, 你有话语权你就能决定团队该用什么风格, 你没有你听别人的, 都一样怕屎山, 没有什么高低之分.
vyuai
60 天前
@iintothewind 好的 感谢您

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1083745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX