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