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

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

    
     1
  • Fredia
    2019-08-15
    老师,我们用得dozer来进行拷贝的,不知道性能和modelmapper哪个更好?

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

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

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

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

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

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

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

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

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

    
     1
  • pdh
    2019-12-28
    波波老师,您好!我们项目使用的是request使用DTO,response使用VO。这种做法老师觉得有必要吗?

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

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

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

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

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

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

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

    
    
  • 江厚宏
    2019-07-26
    请问有人用过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-20
    老师求教 DAO 和DMO 和DTO 有啥区别呀

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

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

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

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

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

    
    
  • 深山小书童
    2019-07-16
    波波老师,请教两个问题。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接口示例?

    
    
我们在线,来聊聊吧