当前位置: 首页 > news >正文

DTO、VO、DO、BO、PO 的概念与核心区别

​1. DTO(Data Transfer Object,数据传输对象)​
  • ​核心定义​​:用于不同层级或服务之间的数据传输,例如前端与后端、服务与服务之间的交互。
  • ​特点​​:
    • ​字段精简​​:仅包含传输所需字段,避免冗余数据暴露(如隐藏数据库敏感字段)。
    • ​无业务逻辑​​:纯数据容器,不包含任何业务方法。
    • ​解耦性​​:隔离数据层与展示层,降低系统耦合度。
  • ​示例​​:用户注册时,前端传入的 UserDTO 可能仅包含用户名、密码,而数据库实体 UserDO 可能包含更多字段(如创建时间)。
​2. VO(View Object,视图对象)​
  • ​核心定义​​:专为展示层设计的对象,封装前端页面所需的数据。
  • ​特点​​:
    • ​适配展示需求​​:可能对 DTO 字段进行格式化或扩展(如将性别字段“男”转换为“先生”)。
    • ​只读性​​:通常不允许修改,仅用于展示。
  • ​与 DTO 的区别​​:
    • DTO 是前后端双向传输的数据载体,VO 是后端向前端返回的最终展示数据。
    • VO 可能合并多个 DTO 或删除冗余字段(如将年龄字段转换为年龄段描述)。
​3. DO(Domain Object,领域对象)​
  • ​核心定义​​:在领域驱动设计(DDD)中表示业务实体,封装业务逻辑。
  • ​特点​​:
    • ​业务逻辑承载​​:包含与业务相关的操作方法(如订单状态校验)。
    • ​持久化无关​​:独立于数据库设计,但可能与 PO 对应。
  • ​注意​​:在阿里巴巴规范中,DO 等同于 PO(持久化对象),而在 DDD 中 DO 等同于 BO(业务对象)。
​4. BO(Business Object,业务对象)​
  • ​核心定义​​:封装复杂业务逻辑的对象,通常由多个 PO 或 DO 组合而成。
  • ​特点​​:
    • ​业务聚合​​:例如电商订单业务可能聚合用户、商品、支付等多个 PO 数据。
    • ​逻辑独立性​​:包含业务规则,如订单金额计算或库存校验。
  • ​与 DTO 的区别​​:
    • BO 对内处理业务逻辑,DTO 对外传输数据,BO 可能包含辅助字段(如中间计算结果)。
​5. PO(Persistent Object,持久化对象)​
  • ​核心定义​​:与数据库表结构一一映射的对象,用于数据持久化操作。
  • ​特点​​:
    • ​字段严格映射​​:属性与数据库表字段完全对应。
    • ​无业务逻辑​​:仅通过 ORM 框架(如 Hibernate)进行 CRUD 操作。
  • ​示例​​:用户表 user 对应的 PO 包含 idnameemail 等字段。

​总结对比​

​对象​​定位​​典型场景​​核心差异​
​DTO​跨层传输数据接口参数、服务间调用仅传输必要字段,无业务逻辑。
​VO​前端展示数据页面渲染、API 响应适配展示需求,可能扩展或转换字段。
​DO​业务领域实体DDD 中的聚合根、实体包含业务逻辑,独立于数据库设计。
​BO​复杂业务逻辑封装订单处理、数据分析聚合多个 PO,处理业务规则。
​PO​数据库映射ORM 框架操作数据库严格对应表结构,无业务方法。

​适用场景建议​

  1. ​简单系统​​:可合并 DTO 与 VO,直接使用 PO 作为数据载体。
  2. ​复杂业务​​:
    • ​分层架构​​:通过 DTO 隔离展示层与业务层,VO 适配前端需求。
    • ​领域驱动设计​​:DO 封装核心业务逻辑,BO 协调多实体交互。
  3. ​微服务交互​​:服务间通过 DTO 传递数据,避免暴露数据库结构。

​参考资料​​:

http://www.xdnf.cn/news/716293.html

相关文章:

  • Swagger 访问不到 报错:o.s.web.servlet.PageNotFound : No mapping for GET /doc.html
  • leetcode hot100刷题日记——28.环形链表2
  • 【论文精读】2024 ECCV--MGLD-VSR现实世界视频超分辨率(RealWorld VSR)
  • 第十三章:预处理
  • Dify+MCP+MySQL:智能问数本地实践
  • 品优购项目(HTML\CSS)
  • 缓存架构方案:Caffeine + Redis 双层缓存架构深度解析
  • 2025年05月29日Github流行趋势
  • 【SOLUTION】Java 生成 TOTP 验证码
  • 政策与数字双赋能驱动:ERP助力外贸企业高质量发展路径解析
  • Maven-生命周期
  • 信创采购热潮下的隐忧:单一技术路线的市场垄断之困
  • Oracle RMAN自动恢复测试脚本
  • mongodb的安装使用
  • 20250529-C#知识:分部类和分部方法
  • 小白畅通Linux之旅-----Linux日志管理
  • 【芯片设计中的交通网络革命:Crossbar与NoC架构的博弈C架构的博弈】
  • 在Linux环境里面,Python调用C#写的动态库,如何实现?
  • Java集合操作常见错误与最佳实践
  • OSCP备战-SickOs1.2靶场详细步骤
  • 第九章 MQTT报文
  • C primer plus (第六版)第六章 编程练习第10题
  • 关于《DAHSF》即《火小兔智慧开发平台V2.0》的碎碎念
  • ADC同步采样
  • XMOS以全新智能音频及边缘AI技术亮相广州国际专业灯光音响展
  • 【NebulaGraph】查询案例(七)
  • 两个频率比较接近的简谐振动叠加后会产生拍形
  • C#学习:基于LLM的简历评估程序
  • 4. 算法与分析 (1)
  • 【Dify系列教程重置精品版】第十一章:Dify与slenium