RedBeanIce
V2EX  ›  Java

[方法封装] 提前报错 or 返回空 List

  •  1
     
  •   RedBeanIce · Aug 31, 2022 · 4010 views
    This topic created in 1532 days ago, the information mentioned may be changed or developed.

    我想请问一个问题,假如我 mapper 层有个方法,是根据 customerIdList 查询数据,

    现在要在代码的某个地方封装一个公共方法,

    这个公共方法,假如有一次查询入参为长度为 0 的 list ,那么这个封装方法应该直接报错,还是也返回一个空 list 呢,

    将错误提前暴露出去嘛,直接报错?

    22 replies  •  2022-09-02 14:52:49 +08:00
    Oktfolio
    Oktfolio
    Aug 31, 2022❤️1
    1
    空 list
    hidemyself
    hidemyself
    Aug 31, 2022❤️1
    2
    返回空 list
    iovekkk
    iovekkk
    Aug 31, 2022❤️2
    3
    都行啊,在备注里面写清楚情况说明
    要么在方法里面判断入参为空时直接 throw 一个 exception
    要么返回一个空 list 或者空值都可以
    kop1989smurf
    kop1989smurf
    Aug 31, 2022❤️3
    4
    mapper 或者说 dao 层应该返回空数组。因为单例原则,只负责数据呈现,不负责业务。

    反之如果在业务层( Biz/service )就要具体问题具体分析了。

    假设这个业务是个关键业务,会导致业务的流程异常或者出现难以预测的结果,那么就应该抛出异常。
    反之只是一个普通的查询,业务依赖程度不高,也应该返回空集合。
    TWorldIsNButThis
    TWorldIsNButThis
    Aug 31, 2022 via iPhone❤️2
    5
    如果要报错
    那就在编译期解决
    目前比较常用的方式是定义 NonEmptyList 类型
    ChoateYao
    ChoateYao
    Aug 31, 2022❤️1
    6
    查询操作返回对应的数据类型即可,除非有特殊情况需要对具体字段判断并返回错误信息。
    kop1989smurf
    kop1989smurf
    Aug 31, 2022
    7
    勘误:上文“单例原则”应为“单一职责原则”。最近在指导小弟们 UI 页面栈设计模式上的问题,脑子抽了。
    chendy
    chendy
    Aug 31, 2022❤️2
    8
    if (customerIdList.isEmpty()) {
    return Collections.emptyList();
    }
    xiaoming1992
    xiaoming1992
    Aug 31, 2022 via Android❤️1
    9
    从前端来说,抛错或者空 list 都行,只要不给我返回 null 。。。
    night98
    night98
    Aug 31, 2022❤️1
    10
    @chendy #8 还是建议工具类判空,说不准哪个人入参就是 null
    lululau
    lululau
    Aug 31, 2022 via iPhone❤️1
    11
    当然是返回 empty list ,抛异常是什么骚操作啊

    empty list 的写法:List.of()
    ksc010
    ksc010
    Aug 31, 2022❤️1
    12
    看返回的空 list 是否是在调用者期望(或者是业务允许)的范围内
    dutianze
    dutianze
    Aug 31, 2022❤️1
    13
    if(CollectionUtils.isEmpty(customerIdList)) {
    throw new RunimeException("xxxx");
    }
    倾向于异常,入参不对让调用方改
    isbase
    isbase
    Aug 31, 2022❤️1
    14
    程序也要考虑下防呆设计比较好
    lanlanye
    lanlanye
    Sep 1, 2022❤️1
    15
    那就综合上面说的,返回空 List ,并且输出一条 Warning
    pennai
    pennai
    Sep 1, 2022❤️1
    16
    应该空 List ,dao 层( mapper )不应该抛自定义业务异常,一般都在 Service (或 DDD 的 domain )才抛自定义异常
    NeroKamin
    NeroKamin
    Sep 1, 2022❤️1
    17
    ```
    if (CollectionUtils.isEmpty(list)) {
    return List.of();
    }
    // otherwise
    ...
    ```
    Rocketer
    Rocketer
    Sep 1, 2022 via iPhone❤️1
    18
    这就是个谁负责处理错误的问题。

    如果你要处理这个错误,那就返回空 list 。

    如果你想交给调用方处理,那就抛错。

    两种做法都没问题,自己内部协商好就行。
    chihiro2014
    chihiro2014
    Sep 1, 2022❤️1
    19
    空 list 或者 optional
    akira
    akira
    Sep 1, 2022❤️1
    20
    公共方法 不要多管闲事
    nothingistrue
    nothingistrue
    Sep 1, 2022❤️1
    21
    通过 ID (单个或多个)查询数据,但却没给 ID ,这通常是错误调用,应当抛出异常,但这个异常就仅仅是参数无效异常,并不是提前暴漏出去的错误。

    但是,非通常场景,比如说无需区分结果为空的原因是没给 ID 还是给了 ID 但没对应的数据,那穿个空的 ID 列表就是正常参数,无需抛出异常。

    其实这个的关键还是要看你对 customerIdList 这个参数的定义,是允许空还是不允许空。
    goalidea
    goalidea
    Sep 2, 2022
    22
    根据具体业务
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1103 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 18:24 · PVG 02:24 · LAX 10:24 · JFK 13:24
    ♥ Do have faith in what you're doing.