大佬们, 请教一下关于 Java 后端 Service 层 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vyuai
V2EX    Java

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

  •  
  •   vyuai 2024-10-26 00:32:21 +08:00 2616 次点击
    这是一个创建于 415 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://imgur.com/LRbzXFg
    https://imgur.com/K3thJ6I
    https://imgur.com/LyiGbsm
    1.大佬们, 这样理解对嘛, 第二张图是我思考的, 开发 Service 需要考虑调用的情况嘛, 虽然 Controller 层进行了 @Valid, 如果自己或者别人直接调用 roleId 和 employeeIdList 还是会出现空指针, 是否还需要加上校验呢, 一般企业开发需要考虑到 service 自己和别人调用的情况嘛
    13 条回复    2024-10-26 02:04:56 +08:00
    vuevue
        1
    vuevue  
       2024-10-26 00:35:29 +08:00 via iPhone
    为什不问问神奇 gpt 呢
    rockddd
        2
    rockddd  
       2024-10-26 00:46:24 +08:00
    我是加的,要防着同事一手
    iintothewind
        3
    iintothewind  
       2024-10-26 01:38:06 +08:00
    public 方法, 对传入参数要做防御性判断, 并打印 log.
    看你代码, 好像这两个都没做, 这在大厂恐怕不能通过 review.

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

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


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

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

    目前看的是 SmartAdmin 这个开源项目学习, 大佬有了解的嘛, 看哪位作者的风格比较好呢, 若依实在不喜欢, 目前觉得这个 SmartAdmin 对我帮助很大
    iintothewind
        12
    iintothewind  
       2024-10-26 02:03:14 +08:00
    我不知道, 反正学习打 log 在大厂爬屎山第一课, 出了不要暴露 PII 信息之外, 没有什么不能打的, 毕竟是为了防止自己背锅的.
    其它的我不知道, 代码风格每个团队不同, 没有对错, 你有话语权你就能决定团队该用什么风格, 你没有你听别人的, 都一样怕屎山, 没有什么高低之分.
    vyuai
        13
    vyuai  
    OP
       2024-10-26 02:04:56 +08:00
    @iintothewind 好的 感谢您
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3166 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:42 PVG 19:42 LAX 03:42 JFK 06:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86