跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 DO,DTO,VO
未分類
1 11 月 2020

关于 DO,DTO,VO

关于 DO,DTO,VO

資深大佬 : beichenhpy 5

最近在看阿里规约。 阿里对于 DO,DTO,VO 的规约为

DO ( Data Object ):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。 DTO ( Data Transfer Object ):数据传输对象,Service 或 Manager 向外传输的对象。 VO ( View Object ):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。 

但是我在使用 mybatis 分页时,一般会在 Controller 里直接调用分页方法,返回 IPage 对象 那么 这个时候 Ipage 对象对应的泛型应该用哪个呢? DO 还是 DTO?

大佬有話說 (13)

  • 主 資深大佬 : beichenhpy

    没有大佬来解答一下吗。。

  • 資深大佬 : goodboy95

    如果 IPage 是分出来的一页数据,按照意思来说是 DTO
    如果 IPage 是专门用来分页的一个 object,这就涉及到我的知识盲区了,毕竟我自己想一辈子都想不出这种分法

  • 主 資深大佬 : beichenhpy

    @goodboy95 IPage 这个对象是 mybatis-plus 自带的。。用来放查出来的一页数据

  • 資深大佬 : howells

    就是 vo 把,我对他们的理解就是,你接收请求的参数叫对象叫 dto,你返回的叫 vo

  • 資深大佬 : howells

    你应该把 Ipage 转成一个 VO 类,然后传出去

  • 主 資深大佬 : beichenhpy

    @howells 嗯。。那这样的话对于分页来说,我就在 service 组装 VO,然后给 controller 了,因为涉及到查询到的 current,size 等。。

  • 資深大佬 : zhazi

    https://docs.oracle.com/cd/A97335_02/apps.102/bc4j/developing_bc_projects/bc_awhatisavo.htm
    希望上不要误导人

    vo 两种解释 value object, view object
    这两种 VO 都不应该返回给请求方

    引用 DTO 是为了与业务 Domain 解耦合,在请求时对请求参数进行聚合

  • 資深大佬 : howells

    @zhazi VO ( View Object ):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
    但是你看这个描述,它就不是数据库层描述的对象呀,就是给前端渲染的,是不是我们理解的不是同一个东西

  • 資深大佬 : howells

    @zhazi 我看你给的链接是在描述 select 之后的对象

  • 資深大佬 : feidao158

    @zhazi 小白请教个问题,VO 显示层对象如果不应该返回给请求方,那向请求方返回什么数据呢 或者应该怎么做呢

  • 資深大佬 : zhazi

    @howells
    关于这个 VO 的解释都是出自阿里的 java 开发规约。每个领域概念出现是为了解决问题而出现的。
    DTO/VO 的概念重复。
    有的公司会对给请求叫 xxxRequestObject 返回值 xxxResponseObject
    这无可厚非所有领域概念都是人抽象出来的。
    如果大多数人能从这个抽象概念中获取到实质的好处。那么这个概念就被推崇。如果不能那么这个概念只能提高架构的复杂度。加速代码腐坏。

    https://stackoverflow.com/questions/1612334/difference-between-dto-vo-pojo-javabeans

    Early J2EE literature used the term value object to describe a different notion, what I call a Data Transfer Object. They have since changed their usage and use the term Transfer Object instead.

  • 資深大佬 : dddd1919

    mybatis 返回的是数据库的实体映射,对象和数据库的结构是完全对应的,所以应该直接用 model 或者你说的 DO 。
    DTO 理解上是系统内部的一种传输对象载体,比如 RPC 之间调用传输的数据结构。
    VO 作为外部交互使用的数据结构,负责内部实体和外部展示的相互转换,比如 http API 会用 VO,这样做的好处就是在转换时做到展示友好和屏蔽内部逻辑

    你说的 controller 直接调用 mybatis 是不太规范的方式,应该把 mybatis 调用相关的处理逻辑放在 service 层,把结果返回给 controller,由 controller 转换成 VO 后返回给调用方,或者 service 直接转换好 VO 返回去

    这三者之间的关系我理解的就是最底层 /数据映射层 DO,内部 /中间层 DTO,上层 /对外层 VO

  • 主 資深大佬 : beichenhpy

    @dddd1919 大佬,我这又有个问题,那么如果是一对多查询,使用 ResultMap 设置返回对象,那么返回值对应的实体类应该也是属于 DO 层的吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具