我想请问一个问题,假如我 mapper 层有个方法,是根据 customerIdList 查询数据,
现在要在代码的某个地方封装一个公共方法,
这个公共方法,假如有一次查询入参为长度为 0 的 list ,那么这个封装方法应该直接报错,还是也返回一个空 list 呢,
将错误提前暴露出去嘛,直接报错?
![]() |
1
Oktfolio 201 天前 ![]() 空 list
|
![]() |
2
hidemyself 201 天前 ![]() 返回空 list
|
![]() |
3
iovekkk 201 天前 ![]() 都行啊,在备注里面写清楚情况说明
要么在方法里面判断入参为空时直接 throw 一个 exception 要么返回一个空 list 或者空值都可以 |
![]() |
4
kop1989smurf 201 天前 ![]() mapper 或者说 dao 层应该返回空数组。因为单例原则,只负责数据呈现,不负责业务。
反之如果在业务层( Biz/service )就要具体问题具体分析了。 假设这个业务是个关键业务,会导致业务的流程异常或者出现难以预测的结果,那么就应该抛出异常。 反之只是一个普通的查询,业务依赖程度不高,也应该返回空集合。 |
5
TWorldIsNButThis 201 天前 via iPhone ![]() 如果要报错
那就在编译期解决 目前比较常用的方式是定义 NonEmptyList 类型 |
6
ChoateYao 201 天前 ![]() 查询操作返回对应的数据类型即可,除非有特殊情况需要对具体字段判断并返回错误信息。
|
![]() |
7
kop1989smurf 201 天前
勘误:上文“单例原则”应为“单一职责原则”。最近在指导小弟们 UI 页面栈设计模式上的问题,脑子抽了。
|
![]() |
8
chendy 201 天前 ![]() if (customerIdList.isEmpty()) {
return Collections.emptyList(); } |
![]() |
9
xiaoming1992 201 天前 via Android ![]() 从前端来说,抛错或者空 list 都行,只要不给我返回 null 。。。
|
![]() |
11
lululau 201 天前 via iPhone ![]() 当然是返回 empty list ,抛异常是什么骚操作啊
empty list 的写法:List.of() |
![]() |
12
ksc010 201 天前 ![]() 看返回的空 list 是否是在调用者期望(或者是业务允许)的范围内
|
![]() |
13
dutianze 201 天前 ![]() if(CollectionUtils.isEmpty(customerIdList)) {
throw new RunimeException("xxxx"); } 倾向于异常,入参不对让调用方改 |
![]() |
14
isbase 201 天前 ![]() 程序也要考虑下防呆设计比较好
|
15
lanlanye 201 天前 ![]() 那就综合上面说的,返回空 List ,并且输出一条 Warning
|
![]() |
16
pennai 201 天前 ![]() 应该空 List ,dao 层( mapper )不应该抛自定义业务异常,一般都在 Service (或 DDD 的 domain )才抛自定义异常
|
17
NeroKamin 201 天前 ![]() ```
if (CollectionUtils.isEmpty(list)) { return List.of(); } // otherwise ... ``` |
![]() |
18
Rocketer 201 天前 via iPhone ![]() 这就是个谁负责处理错误的问题。
如果你要处理这个错误,那就返回空 list 。 如果你想交给调用方处理,那就抛错。 两种做法都没问题,自己内部协商好就行。 |
19
chihiro2014 201 天前 ![]() 空 list 或者 optional
|
![]() |
20
akira 201 天前 ![]() 公共方法 不要多管闲事
|
21
nothingistrue 201 天前 ![]() 通过 ID (单个或多个)查询数据,但却没给 ID ,这通常是错误调用,应当抛出异常,但这个异常就仅仅是参数无效异常,并不是提前暴漏出去的错误。
但是,非通常场景,比如说无需区分结果为空的原因是没给 ID 还是给了 ID 但没对应的数据,那穿个空的 ID 列表就是正常参数,无需抛出异常。 其实这个的关键还是要看你对 customerIdList 这个参数的定义,是允许空还是不允许空。 |
![]() |
22
goalidea 200 天前
根据具体业务
|