service 层接收的参数 xxRequest 还是 xxDto ?

2020-07-14 14:10:14 +08:00
 jerrry

比如 UserController 中有 List<UserDto> findUsers(UserSearchRequest xxRequest) { return userService.findUsers(...) } 方法,

那么 UserService 中的 List<UserDto> findUsers(...) 接收的参数应该怎么设计 ?

其中 UserSearchRequest 包括多个查询条件 ( keywords, username, age, time, city... ).

5369 次点击
所在节点    程序员
32 条回复
damai0419
2020-07-14 14:55:24 +08:00
直接用也可以,要么创建一个 xxxQuery 也可以。
zhangdashuan
2020-07-14 14:57:17 +08:00
param
sheeta
2020-07-14 14:58:34 +08:00
我用的是 xxRequest
lqs
2020-07-14 15:43:40 +08:00
原则上 Service 层应该单独有一套业务对象,这样就可以把 UserService 里的接口设计成 List<UserBo> findUsers(UserSearchBo),然后在 UserController 里对输入输出都做适配。
luxinfl
2020-07-14 15:48:55 +08:00
我们小公司,没那么复杂,对外统称 dto 。有时候还用 domain 来作入参和返参。
jerrry
2020-07-14 19:05:39 +08:00
@lqs 但是我的 controller 和 service 对应的查询参数一般都是一样的,所以这时候不知道怎么设计...
jerrry
2020-07-14 19:06:29 +08:00
@luxinfl 对请求参数检验的话还是封装在 vo 里比较方便吧
wshcdr
2020-07-14 20:32:27 +08:00
关注一下
hantsy
2020-07-14 21:25:07 +08:00
UserDto 这种太通俗了。

如果你想让你的代码做到 Self Documentation,可以学习 Spring 的命名,尽量取一个有意义的名字。

如果应用了 CQRS,很多命名相对容易些。CreateUserCommand, UserCreatedEvent, 等。

总之,尽量做到一个 Dto 仅仅封装所需要的数据,见过一些人为了省事,用一个巨无霸 Dto,完全没把 OOP 放在心上。
hantsy
2020-07-14 21:26:49 +08:00
@lqs
@jerrry

VO,BO 是什么鬼东西,我写了十几年 Java,读了 N 多本书,没见过。
hantsy
2020-07-14 21:28:07 +08:00
Value Object ???
hantsy
2020-07-14 21:28:46 +08:00
DDD 中 Value Object 是相对于 Entity 来讲的。
Sharuru
2020-07-14 21:30:15 +08:00
xxxForm,xxxModel,xxxParam 。
针对楼主的场合,可以用 xxxCriteria 。
MarioLuo
2020-07-15 01:00:50 +08:00
命名重要保持一致性就好,不过个人更倾向: XxxParams, XxxQuery 代表入参, XxxDTO,XxxInfo 代表出参,更符合自然语意些
oneisall8955
2020-07-15 01:24:09 +08:00
跟项目,假如新项目看自己喜好
daimubai
2020-07-15 01:41:06 +08:00
随主流
接受用 xxxDTO ( DTO 大写可读性更高点吧)
响应用 VO
jerrry
2020-07-15 05:13:38 +08:00
@hantsy view object, api 返回的数据一般是和 entity 不一致的。
jerrry
2020-07-15 05:19:05 +08:00
@Sharuru 谢谢,那如果它们所需的参数是一致的情况下,controller 层需要的参数对象和 service 需要的参数对象需要分成俩个吗?
yalin
2020-07-15 08:39:37 +08:00
都是 DTO 层
memedahui
2020-07-15 08:47:51 +08:00
最近刚好看了一个类似的文档,说的就是一共需要 3 个:
接入层模型:view object 与前端对接的模型
业务模型:领域模型,业务核心模型
数据模型:

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

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

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

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

© 2021 V2EX