1
knightdf 2021-07-14 21:55:48 +08:00
好几年没写 java 了,最近弄个 java 项目,各种 O 把我看绕了,看了解释还是有点蒙逼,难怪最卷语言啊
|
2
potatowish 2021-07-14 23:15:52 +08:00 via iPhone
vo 是返回到前端的视图对象,dto 是数据传输对象,dto 作为入参,vo 作为返参,我这样解释可能不是百分之百准确。
个人觉得没必要这么死板,这只是个规范而已,我就喜欢用 XXResult 和 XXParam |
3
securityCoding 2021-07-15 09:52:45 +08:00 via Android
@potatowish 的确是,我的习惯是 req resp
|
4
Yi23 2021-07-15 10:19:08 +08:00
在我看来 DTO 只存在于不同服务间调用,如果是单服务的话没必要使用 DTO 对象。至于 VO,可以作为 service 层返回对象的封装,也可以认为是服务返回结果封装
说实话,我觉得叫 xxVO xxDTO 真的挺丑的,个人更加倾向使用 xxRequest xxResponse xxFacade 这种 |
5
xuanbg 2021-07-15 14:41:14 +08:00
我习惯返回的叫 VO,传入的叫 DTO 。其实不管什么 O 都一样,并没有什么本质的区别。分 VO 和 DTO,不过是方便前端组织接口参数和按需返回数据罢了。
|
6
ChoateYao 2021-07-15 15:27:57 +08:00
我觉得长参数就用 ParamsObject 挺好的,简单易懂。
|
7
golangLover OP @potatowish 那种暂时的对象是作为内部类吗?作为 dto ?
|
8
golangLover OP @Yi23 那服务内部的他应该叫什么名字,还有就是写在哪里?写服务里令一个服务有好几个 class. 写外面又不知道归类为什么对象
|
9
golangLover OP @xuanbg 那中间聚合的对象呢?应该叫什么名字
|
10
xuanbg 2021-07-16 07:20:04 +08:00
@golangLover 哪来的中间聚合?我都是 xxxDto 一路传到 sql 方法里面,有些参数前端给不了也不影响,自己 set 进去就好。然后 sql 查询方法返回的类型就是 xxxVo 。
|
11
zxCoder 2021-07-16 08:29:43 +08:00 via Android
我直接返回字典 我用的 c#
|
12
Yi23 2021-07-16 09:41:58 +08:00
@golangLover 我更习惯 controller 接收 xxRequest 直接透传到 service 在 service 中转为 xxEntity 向下都使用 xxEntity ;如果是查询的 service 会封装一个 xxFacade 比如 userService 可能就会返回 userFacade ;
|
13
liaojl 2021-07-16 12:37:44 +08:00 via iPhone
map 一把梭🐶
|
14
Joker123456789 2021-07-18 15:59:34 +08:00
简单粗暴的理解一下就行了。
Controller 进出都是 VO,为的是 一旦前后端的交互数据有了改动,只需要改 controller 就行了,不需要去动 service 。 Service 进出都是 DTO,为的是 业务逻辑内部发生变化,跟外界无关,反正入参出参没改。 DAO 就要看情况了,如果是多表查询 一次返回多个表的字段作为一个数据集,为了数据结构的清晰 可以用 DTO 。其他情况基本进出都是 PO 。 但是 绝非雷打不动的,实际开发中可以酌情处理。 |
15
golangLover OP @xuanbg 例如在 service 里用一些方法例如 reduce 啊 groupby 之类的。那这种操作可能我会拆分一些方法,因为他们可能比较长,方法总有返回值吧,那这些返回值是什么类型的 o 呢
|
16
golangLover OP @Yi23 不太懂一个 facade 的意思。有类似的结构可能示范一下吗
|
17
Yi23 2021-07-19 09:47:32 +08:00
@golangLover 其实就是 valueObject 只是个人习惯称为 facade 对象(外观对象) hhh
|
18
MidCoder 2021-07-21 13:37:41 +08:00
业务开发里面就是各种 O 之间的转换,越复杂的架构,这种 O 越多。所有的性能损耗都是在 get/set 里面,90%的逻辑都是 get/set.
|