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... ).

5370 次点击
所在节点    程序员
32 条回复
memedahui
2020-07-15 08:49:21 +08:00
最近刚好看了一个类似的文档,说的就是一共需要 3 个:
接入层模型: view object 与前端对接的模型
业务模型: domain object 领域模型,业务核心模型
数据模型: data object 数据模型,同数据库映射
liuxey
2020-07-15 08:52:05 +08:00
@hantsy #10 bussiness object,远古时代 Java 里对象名字可太多了:BO VO DTO DO POJO
hantsy
2020-07-15 09:06:49 +08:00
VO= Value Object,我觉得还不错,如果是 View Object,呵呵,这种创造太恐怖了。
hantsy
2020-07-15 09:10:29 +08:00
@MarioLuo 接受自然语言这一条不错。
实际各种层的传输数据,另外还有一个特质,Immutable 。
passerbytiny
2020-07-15 09:38:13 +08:00
DTO,Data Transfer Object,数据转换对象。你要真是个 DTO,那是一个有状态 Java Bean (并且带大量方法,或者要用到工厂模式等各种模式),一般人用不起。

如果要求上下层互不依赖,需要 DTO 来解藕。否则,谁是被依赖方,用谁定义的对象。
RedBeanIce
2020-07-15 09:50:20 +08:00
DO ( Data Object ):与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
BO ( Business Object ):业务对象。由 Service 层输出的封装业务逻辑的对象。
DTO ( Data Transfer Object ):数据传输对象,Service 或 Manager 向外传输的对象。
VO ( View Object ):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。

以上摘抄自阿里巴巴 Java 开发手册(参考部分)
Rwing
2020-07-15 09:57:21 +08:00
所有用 XXO,XO 都是懒人,这种废话写不写没什么意义,不能准确表述意图
ylsc633
2020-07-15 10:00:07 +08:00
这问题不是 脉脉 里的么.....
tang123456
2020-07-15 10:06:43 +08:00
目前我们公司是统一传参用 dto,反参用 vo
YzSama
2020-07-15 10:13:03 +08:00
@RedBeanIce #26 直接沿用 阿里巴巴的规范就好了。

这个最好看看 阿里 Java 开发规范 工程设计 那块,因为 service 层 存在对外服务。例如 RPC,所以统一 DTO 是反参。

BO 是 Service 入参 。

如果楼主的项目里,service 只是提供 controller 的话,因此 入参和校验 其实都是从 controller 来的。并不需要修改成 BO,直接沿用就好了。还少了一层转换
jerrry
2020-07-15 10:45:42 +08:00
@YzSama 谢谢, 受教了。 不过如果用到 BO 的话, VO 如何转换到 BO 呢?是把转换逻辑封装到 VO 的一个方法里?还是单独写一个转换器类。
jerrry
2020-07-15 10:47:34 +08:00
@RedBeanIce BO 和 DTO 的区别好像没看出来啊。。。

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

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

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

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

© 2021 V2EX