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

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

上线出问题你都不知道是不是你代码自己的问题, 还是别人传入参数的问题.
vyuai
1 天前
@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
1 天前
@vuevue 问了, 但是很多场景不太理解, 有些也是看情况而定
vyuai
1 天前
@iintothewind 感谢大佬, 看来还是要考虑各个方面问题
iintothewind
1 天前
看上下文以及自己需求, 如果允许代码 break, 就抛 exception,
如果还有返回那就自己 handle, 返回约定的结果,
但重要是的是打印 log, 防止扯皮,
在大厂, 上线非常重要的是打印 log, 要不然你自己说不清楚, 出问题, 锅就是你的.
vyuai
1 天前
@iintothewind 日志的话, 一般打印错误日志和成功日志嘛, 如果发生异常有全局异常处理类做日志打印, service 层还需要打印吗
vyuai
1 天前
@iintothewind 好的, 感谢感谢
iintothewind
1 天前
你这个真的受 spring 影响太深了, 你还指望全局 handler 给你兜着啊?

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


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

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

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

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

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

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

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

© 2021 V2EX