Java 增删改查都要对应一个 DTO 接收前端传参吗?

2020-07-31 13:53:00 +08:00
 Vimax

比如创建用户,使用 userInsertDTO 绑定前端的参数并用 @Validated 校验,包含的参数:

如果是修改用户,一般会多一个用户的 id,使用 userUpdateDTO 接收前端参数,并用 @Validated 校验

或者 userUpdateDTO 只带一个 id,然后继承 userInsertDTO 的参数。并用 @Validated 校验

如果查询也用对象接收,条件查询 name,age 等参数都不是必须传,那我是否需要新建一个 userQueryDTO,并用 @Validated 校验。

这样子每个 PO,都要创建多个 DTO 。同样,如果我如果要返回数据给前端,也要创建很多个 VO 返回数据给前端。

这样会冗余吗?有每有更好的方法?

3986 次点击
所在节点    Java
10 条回复
Hurriance
2020-07-31 14:00:32 +08:00
@Validated 可以实现分组检验的,具体百度一下
wangyanrui
2020-07-31 14:11:31 +08:00
如 1 楼所说,group = xxx 即可。
但是个人喜欢分成多个,即更新是更新的,修改是修改的~
Tokiomi
2020-07-31 14:30:21 +08:00
感觉分开比较好,但是懒
gdtdpt
2020-07-31 14:43:24 +08:00
分开好,大项目里牵一发动全身太难受了
Cbdy
2020-07-31 15:20:51 +08:00
这是合理做法的比较吧,你不想毕竟个加数据库字段,就要跟接口着变
kvkboy
2020-07-31 17:28:04 +08:00
个人观点哈,除非你这个 DTO 涉及到多个不同的业务对象你可以考虑分开,毕竟页面操作这种就很难说什么单一职责了,极端情况就是点一个按钮数据库被刷了一轮然后爆炸了。

如果是 1 对 1,你就该想一下,为什么不直接用 PO 而要麻烦的用一个 DTO 。

没道理你这个 InsertDTO 需要改动的地方,updateDTO 不会有变化

Validate 的话楼上的说了,可以分组

至于 VO 确实是硬伤,不过也有 GraphQL 用(但是我没用过,逃
kingwrcy
2020-07-31 17:30:56 +08:00
分开吧,不然通过 swagger 暴露出去的字段前端会有疑问
比如 update 的时候有 id,insert 的时候不要 id,前端就会问为什么 insert 的接口里有 id?
luxinfl
2020-07-31 17:53:32 +08:00
我比较愿意分开多个 dto 来接参数,这样看起来清晰明了,要是几个接口的参数都放在一个 dto,就感觉很挤。
but
我现在就是放在一起的,因为懒
nozer
2020-07-31 17:55:57 +08:00
这是对前端最基本的尊重。

只取且取,我要的。
只给且给,你要的。
KuroNekoFan
2020-08-01 15:25:17 +08:00
minimal api 了解一下

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

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

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

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

© 2021 V2EX