当前播放: 18 | DTO和DMO为什么要互转?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:课程介绍和案例需求 (5讲)
01 | 课程介绍
免费
02 | 背景说明
免费
03 | 课程目标和主要内容
免费
04 | 课程案例需求
免费
05 | 课程补充说明
免费
第二章:系统架构设计和技术栈选型 (8讲)
06 | 为何采用微服务架构?
免费
07 | 架构设计和技术栈选型
免费
08 | 数据和接口模型设计:账户服务
09 | 数据和接口模型设计:业务服务
10 | Dubbo、Spring Cloud和Kubernetes该如何选型(上)
11 | Dubbo、Spring Cloud和Kubernetes该如何选型(中)
12 | Dubbo、Spring Cloud和Kubernetes该如何选型(下)
13 | 技术中台到底讲什么?
第三章:服务开发框架设计和实现 (10讲)
14 | Staffjoy项目结构组织
15 | 谷歌为何采用单体仓库(Mono-Repo)?
16 | 微服务接口参数校验为何重要?
17 | 如何实现统一异常处理?
18 | DTO和DMO为什么要互转?
19 | 如何实现基于Feign的强类型接口?
20 | 为什么框架层就要考虑分环境配置?
21 | 异步处理为何要复制线程上下文信息?
22 | 为你的接口添加Swagger文档
23 | 主流微服务框架概览
第四章:可编程网关设计和实践 (9讲)
24 | 网关和BFF是如何演化出来的(上)
25 | 网关和BFF是如何演化出来的(下)
26 | 网关和反向代理是什么关系?
27 | 网关需要分集群部署吗?
28 | 如何设计一个最简网关?
29 | Faraday网关代码解析(上)
30 | Faraday网关代码解析(下)
31 | 生产级网关需要考虑哪些环节?
32 | 主流开源网关概览
第五章:安全框架设计和实践 (10讲)
33 | 安全认证架构演进:单块阶段(上)
34 | 安全认证架构演进:单块阶段(下)
35 | 安全认证架构演进:微服务阶段
36 | 基于JWT令牌的安全认证架构
37 | JWT的原理是什么?
38 | JWT有哪两种主要流程?
39 | Staffjoy安全认证架构和SSO
40 | 用户认证代码剖析
41 | 服务调用鉴权代码剖析
42 | 如何设计用户角色鉴权?
第六章:服务测试设计和实践 (7讲)
43 | Spring Boot微服务测试该如何分类?
44 | 什么是契约驱动测试?
45 | 什么是测试金字塔?
46 | 单元测试案例分析
47 | 集成测试案例分析
48 | 组件测试案例分析
49 | Mock vs Spy
第七章:可运维架构设计和实践 (8讲)
50 | 何谓生产就绪(Production Ready)?
51 | Spring Boot如何实现分环境配置
52 | Apollo vs SpringCloudConfig vs K8s ConfigMap
53 | CAT vs Zipkin vs Skywalking(上)
54 | CAT vs Zipkin vs Skywalking(下)
55 | 结构化日志和业务审计日志
56 | 集中异常监控和Sentry
57 | EFK & Prometheus & Skywalking + Kubernetes 集成架构
第八章:服务容器化和Docker Compose部署 (10讲)
58 | 本地开发部署架构和软件需求
59 | 手工服务部署和测试(上)
60 | 手工服务部署和测试(中)
61 | 手工服务部署和测试(下)
62 | SkyWalking调用链监控实验
63 | Docker和Docker Compose简介
64 | 容器镜像构建Dockerfile解析
65 | Docker Compose服务部署文件剖析
66 | 将Staffjoy部署到本地Docker Compose环境(上)
67 | 将Staffjoy部署到本地Docker Compose环境(下)
第九章:云原生架构和Kubernetes容器云部署 (17讲)
68 | 到底什么是云原生架构?
69 | Kubernetes背景和架构
70 | Kubernetes有哪些基本概念(上)
71 | Kubernetes有哪些基本概念(下)
72 | 理解Kubernetes节点网络和Pod网络
73 | 深入理解Service和ServiceDiscovery
74 | NodePort vs LoadBalancer vs Ingress
75 | 本地测试Kubernetes部署文件剖析
76 | 本地测试Kubernetes环境搭建
77 | 将Staffjoy部署到本地Kubernetes环境(上)
78 | 将Staffjoy部署到本地Kubernetes环境(下)
79 | 生产环境Kubernetes部署文件剖析
80 | 阿里云Kubernetes环境创建
81 | 将Staffjoy部署到阿里云Kubernetes环境
82 | Kubernetes应用动态配置实验
83 | Kubernetes应用金丝雀发布实验
84 | 阿里云资源释放
第十章:项⽬复盘、应用和扩展环节 (2讲)
85 | 课程复盘
86 | 项目扩展和应用
第十一章:附录 Staffjoy 项目源代码解析 (8讲)
87 | Account服务
88 | Company服务
89 | Mail、SMS和Bot服务
90 | Faraday服务
91 | WhoAmI服务
92 | WWW服务
93 | 前端应用
94 | 结课测试&结束语
18 | DTO和DMO为什么要互转?

18 | DTO和DMO为什么要互转?

杨波
前携程/拍拍贷技术总监,微服务技术专家
全集6533
新人首单 ¥49.9 原价 ¥199
8
登录 后留言

精选留言(18)

  • Wyatt
    老师,我们用得dozer来进行拷贝的,不知道性能和modelmapper哪个更好?

    作者回复: 网上有对5种mapping框架的性能比对,可以参考一下:https://www.baeldung.com/java-performance-mapping-frameworks

    2019-08-15
    1
    2
  • Kian.Lee
    我们目前应用服务层入参和返回值采用DTO,领域服务层一般采用实体对象、值对象或简单参数,两层之间的数据传递采用对象映射,也是采用Model Mapper ,然后通过多层基类继承和泛型分别实现通用的增删改查方法和通用业务状态管理,以及代码自动生成技术,现在做到只要数据模型定义完成,一键生成各层代码,然后根据应用服务层产生的DTO类,根据业务需求定义各个DTO的类属性(各个业务入参和返回值数据)一个模块的通用业务功能就实现了。引用阿里前端委员会的四大技术方向定义“在前端的体系中,习惯把 To B 看成是中后台,它的特质是布局、表单、可视化图表等都是高度标准化的,在这样的体系中,如何用低代码或者无代码体系来完成重塑是关键,其中包含了大量的组件、元件、模块。”我们基本实现了“低代码或者无代码体系来完成重塑”。

    作者回复: 不错,已经做到自动化和精细化阶段,值得借鉴。

    2019-07-17
    2
    2
  • wind
    spring自带的BeanUtils也可以,没必要用第三方的吧

    作者回复: BeanUtils只能做简单的一对一的字段映射和克隆,ModelMapper之类是专业的Java Mapping框架,具有很灵活的配置和智能映射能力,常见的专业Mapping框架可以参考:https://www.baeldung.com/java-performance-mapping-frameworks

    2019-12-31
    1
  • Thomas Yang
    波波老师有一个点比较纠结,基于rest的微服务下,服务的controller本身就是一个 service的角色了而不是传统的mvc的交互逻辑了,那是不是DTO到controller就可以了,内部子service全部用DO会更方便。

    作者回复: 这些代码组织方式都是逻辑性的,形成规范保持一致就好,没必要纠结拘泥于形式。

    2019-07-24
    1
  • request/response这是很标准的做法,在经典的soa中叫文档消息模式。其实定义一个通用的响应结果类加泛型也可以支持feign,序列化和反序列化也是没问题的。另外service层是直接复用控制器中的request/response对象,不需要再多定义一套dto吧?其实不建议“偷懒”通过这种反射工具做映射,有时候某层的模型字段变更了(虽然db只让加字段不让改字段),编译器和ide不直接感知可能会有风险...

    作者回复: 谢谢你的反馈!
    1. 经过和学员交流,Response<T>方式也可以实现基于feign的强类型客户端,后面会再开发一个项目,采用这种方式,供大家参考。
    2. 直接复用DMO也可以做到,而且可以减少转换,但是有些复杂场景,将DTO/DMO分开定义,也有好处,课程中也有提到,这样两边比较清晰,可以根据需要灵活裁剪或添加字段,可以减少依赖和判断逻辑。
    3. 映射工具的确也是有利有弊的,使用时要了解其弊端,并针对性防范(比如单测)。

    2019-07-18
    1
    1
  • 永旭
    老师你好, dto 和 vo 有用法上的推荐吗 ?

    作者回复: DTO数据传输对象,VO值对象,它们的用途大致类似,主要用于在进程间传递数据,不同程序员习惯称谓不同而已,没有必要太纠结,根据你的习惯选择并且保持一致性即可。

    2019-07-18
    1
  • Japhy
    老师你好,有个纠结的地方想请教下, springboot自带的ResponseEntity感觉很强大,但是无法设置traceId等一些必要的东西,自己设计返回结果集更贴近业务,但是对于返回头之类的设置会麻烦,请问下有比较好的实践方案么

    作者回复: 返回头之类的数据放在http response header里头不行吗?

    2020-04-19
    1
  • 彬清
     DAO = 数据访问对象,封装数据库操作的对象
    DMO = 数据模型对象,也称实体对象或领域对象,封装数据存储字段,主要用于持久化领域数据。
    DTO = 数据传输对象,也有称VO值对象,封装数据传输字段,主要用于在进程间传递数据。
    2020-03-26
  • 数据对象传输,哈哈,想起我们团队中有各种O
    DTO
    DAO
    CO
    VO
    PO
    EO
    而且我们喜欢自己转换,清晰明了灵活,只是代码会多出许多,我觉得可以尝试一下modleMapper。

    作者回复: 尽量不要搞很多XXO,一般DTO(数据传输对象)+Entity(数据存储实体)就够了,XXO不在于多,而在于保持风格一致性。

    2020-03-16
  • pdh
    波波老师,您好!我们项目使用的是request使用DTO,response使用VO。这种做法老师觉得有必要吗?

    作者回复: DTO,VO之类的只是一种逻辑分类,便于区分和管理数据对象的,让代码结构更有条理易于维护。实际各家的做法都不同,没有所谓统一标准做法,具体有没有必要,看是否能改善代码的可管理和维护性。

    2019-12-28
  • grey927
    杨老师,我们现在微服务改造想把项目中的velocity改掉(用于发短信/邮件的模板引擎,由于最新的Spring boot对Velocity支持不太好),目前可供选择的是freemarker和Thymeleaf ,您认为用这两个用哪个会相对好一点。

    作者回复: freemarker和thymeleaf这些模版引擎都差不多,邮件模版的话,可能freemarker更合适一些,个人看法。

    2019-08-28
    1
  • LSJ
    老师我们没有定义DTO,接口全部返回的是Map<String,Object>对象,传参也是。这样就不用在客户端和服务端共享数据模型了。这种方式可取吗

    作者回复: 这也是一种做法,相当于弱类型接口,有点类似javascipt弱类型语言做法,也可以,就是客户/服务器端自己要解析麻烦一点。

    2019-08-15
  • sayid
    我们是用了自己写的一个util, 支持对象T和List<T>, Map<T> 三种数据模式的copy

    作者回复: cool,有机会可以开源分享下你们的这个工具。

    2019-08-03
  • 江厚宏
    请问有人用过orika嘛?
    modelmapper 和 orika建议选择哪个好?

    作者回复: 从github上看,orika和modelmapper的历史时间差不多,都是2011 ~ 2019, orika有780星,modelmapper有1192星,两个差不多。

    参考:
    https://github.com/orika-mapper/orika/graphs/contributors
    https://github.com/modelmapper/modelmapper/graphs/contributors
    https://github.com/modelmapper/modelmapper/graphs/contributors

    2019-07-26
  • 飞翔
    老师求教 DAO 和DMO 和DTO 有啥区别呀

    作者回复: DAO = 数据访问对象,封装数据库操作的对象
    DMO = 数据模型对象,也称实体对象或领域对象,封装数据存储字段,主要用于持久化领域数据。
    DTO = 数据传输对象,也有称VO值对象,封装数据传输字段,主要用于在进程间传递数据。

    2019-07-20
    1
  • 男朋友
    org.mapstruct.Mapper这个包吗?用来映射DTO和DMO

    作者回复: 对,项目用了mapstruct(https://github.com/mapstruct/mapstruct),做DTO和DMO之间的映射。

    2019-07-18
  • grey927
    modelmapper支持copy包含复杂对象的dto吗?

    作者回复: 支持,具体用法可以参考官方文档http://modelmapper.org/

    2019-07-17
  • 深山小书童
    波波老师,请教两个问题。1⃣️为什么dto package下既有request结尾的类,也有response结尾的类,还有dto和list结尾的类,看起来有点不那么优雅,这方面大厂有什么规范吗?2⃣️我们在使用feign的时候都是返回一个统一带泛型resonse,好像没有序列化问题,像波波老师的做法,response对象会不会无比的多。

    作者回复: 1. 对,每个服务操作严格有一对Request/Response消息对应,这个是grpc/protobuf的规范做法,可以参考https://github.com/Staffjoy/v2/tree/master/protobuf。之前大厂ebay的trading api(https://developer.ebay.com/devzone/xml/docs/reference/ebay/index.html),也是采用这种接口风格。这是一种类rpc编程风格,我的staffjoy项目中的微服务虽然是RESTful的,但是沿用了这种类似谷歌grpc的编程风格,目的是实现类似rpc的强类型接口,request/response是会多一点,但是只要规范,不是大问题。

    2. 具体要看你怎么实现的,能否贴一个带范型response示例和客户端feign接口示例?

    2019-07-16
收起评论
看过的人还看
微服务架构实战160讲

杨波  拍拍贷研发总监、资深架构师、微服务技术专家

171讲 | 11803 人已学习

新人首单 ¥69.9 原价 ¥299
数据结构与算法之美

王争  前Google工程师

80讲 | 90854 人已学习

新人首单 ¥29.9 原价 ¥129
MySQL实战45讲

林晓斌  网名丁奇,前阿里资深技术专家

49讲 | 59162 人已学习

新人首单 ¥29.9 原价 ¥129
从0开始学架构

李运华  前阿里资深技术专家

60讲 | 46567 人已学习

新人首单 ¥29.9 原价 ¥129