Z次元
文章 笔记 日志
专题
专栏分类 文章归档
友链
友情链接 朋友圈
交流
留言 关于我
头像
系列文章
-
-
-
-
VO、DTO、BO、PO、DO区别
系列文章
知识积累
最后更新:2024/12/15|创建时间:2022/6/28

这篇文章讨论了软件开发中的五种对象模型:VO(视图对象)、DTO(数据传输对象)、BO(业务层对象)、PO(持久化对象)和DO(领域对象或数据层对象)。每种对象都在不同层发挥作用,共同支持软件的数据处理和展示。

前言

  • VO:(View Object)视图对象,一般位于Controller层,用于展示视图。
  • DTO:(Data Transfer Object)数据传输对象, 即RPC 接口请求或传输出去的对象,用于展示层与服务层之间的数据传输对象。
  • BO:(Business Object)业务层对象,一般位于Service层,它与 DO 会有一定的属性差别。
  • PO:(Persistent Object)持久化对象,对象属性与数据库字段形成映射关系。
  • DO:(Domain Object)领域对象,就是从现实世界中抽象出来的有形或无形的业务实体,可以当成BO;(Data Object**)**数据层对象,对象属性与数据库字段形成映射关系,可以当成PO

图片

VO与DTO

VO:展示层需要展示的数据。
DTO:业务逻辑层需要接收的数据和返回的数据。
VO与DTO的属性值基本相同,但是VO是DTO的最终解释,可以对DTO的字段进行适当删减。
举个例子:

例子1:

DTO中返回的字段为:

{
    "sex": "女",
}

对于大部分需求来说中返回的字段为中返回的字段就已经够用了,但是如果说业务的需求是展示具体的身份,那就需要在VO层进行进一步解释:
VO中返回的字段为:

{
    "sex": "女演员",
}

例子2:
DTO:

{
    "sex": "男",
    "age": "17"
}

如果说展示层只需要展示是否成年:
VO:

{
    "age": "未成年"
}

PO与DO

PO:通常来说是只有get/set方法的POJO,也就是常说的实体类。
DO:一般是PO的组合,也就是多表联查的映射。
举例:
PO1:

{
    "id": "999",
    "name": "ahzoo"
}

PO2:

{
    "userId": "999",
    "role": "管理员"
}

DO:

{
    "id": "999",
    "name": "ahzoo",
    "role": "管理员"
}

BO和PO

BO:与PO的区别是,BO会删掉一些不宜在展示层展示的数据,只对外提供必要的字段属性。
比如用户需要查询用户的信息,通常来说这个返回给用户的用户信息是不应该包含密码之类的一些字段的,那么我们就可以在BO层做一下处理。
举例:
如果用PO层的话返回的字段为:

{
    "id": "999",
    "name": "ahzoo",
    "password":"123456"
}

BO层的放回字段:

{
    "id": "999",
    "name": "ahzoo"
}

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1illw5frinnv7

版权声明
本文依据 CC-BY-NC-SA 4.0 许可协议授权,请您在转载时注明文章来源为 Z次元 ,若本文涉及转载第三方内容,请您一同注明。
更多专栏文章推荐
知识积累
人非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。
MyBatis多表联查
2022/6/26
轮询、长轮询、长连接、WebSocket
2022/5/4
JDK新版特性(18-21)
2025/2/7
JDK新版特性(11-17)
2025/1/30
评论区
发表评论

这里还没有评论哦

快来发一条评论抢占前排吧

前言
VO与DTO
PO与DO
BO和PO
目录
前言
VO与DTO
PO与DO
BO和PO
十玖八柒
每天进步多一点
欢迎到访φ(゜▽゜*)♪
最新评论
永恒末匕:

好哇塞,这个厉害

十玖八柒:

测试图片发送

Corwin: @十玖八柒

哎 主要是我的个人网站用的是静态的cos 实现评论框还是有点困难

十玖八柒: @Corwin

评论模块是自己写的,富文本编辑器是封装的Tiptap(这个编辑器非常强大,你可以去看下)

我的
个人主页
站点地图
RSS订阅
导航
十年之约
虫洞穿梭
全站友链
虚位以待
©2020 - 2025 By 十玖八柒 版权所有
豫ICP备20021466号