今天给大家带来一篇关于VO,BO,PO,DO,DTO的文章,阅读完这篇文章之后,希望大家对VO,BO,PO,DO,DTO有自己的见解。

VO,BO,PO,DO,DTO

概念

在讲具体的概念之前,我们先简单的讲一讲我们MVC开发模式。

MVC的简单定义:

M层负责与数据库打交道;

C层负责业务逻辑的编写;

V层负责给用户展示(针对于前后端不分离的项目,不分离项目那种编写模版的方式,理解V的概念更直观)。

而我们今天要说的VO,BO,PO,DO,DTO呢,就是穿梭在这M、V、C层之间的实体传输对象。

实体传输对象示意图

  • VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
  • DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,更符合泛指用于展示层与服务层之间的数据传输对象。
  • BO(Business Object):业务对象,把业务逻辑封装为一个对象,这个对象可以包括一个或多个其它的对象。
  • PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。
  • DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

有必要用吗?

项目中真的有必要定义VO,BO,PO,DO,DTO吗?

还是要理性看待这个问题,要看我们项目“目的地”是什么。

如果项目比较小,是一个简单的MVC项目,又是单兵作战,我不建议使用VO,BO,PO,DO,DTO,直接用POJO负责各个层来传输就好,因为这种项目的“目的地”是快速完成。

而我们更多的时候,是持续迭代的团队协作项目,这个时候我们就建议用VO,BO,PO,DO,DTO,而且团队内要达成共识,形成一个标准规范。

  1. 业务复杂,人员协同性要求高的场景下,这些规范性的东西不按着来虽然不会出错,程序照样跑,但是遵守规范会让程序更具扩展性和可读性;
  2. 让类语义更明确,很容易知道类的含义;

其实就是提升项目的可扩展性、可维护性与可阅读性。

提升这些性能的尽头是经济效益。

总结

这篇文章很短,最后稍微总结一下,不管用哪种方式,只要团队内定义好一种适应的协同规范就行。

没有一个绝对好与绝对坏的方式方法。

团队规范的尽头能提升项目的可扩展性、可维护性与可阅读性,从而降低bug率。

另附这些概念命名规范:

  • 数据对象:xxxPO,xxx即为数据表名。(也可DO)
  • 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
  • 展示对象:xxxVO,xxx一般为网页名称。
  • 业务对象:xxxBO,xxx是业务名称。

真的有必要定义VO,BO,PO,DO,DTO吗?相关推荐

  1. VO BO PO DO DTO DAO POJO概念及区别

    VO BO PO DO DTO DAO POJO 概念及区别 1.VO( value object) 即值对象 VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看 ...

  2. java web分层和层间数据传递 vo bo po (转载)

    还记得97年左右开始的胖客户机和瘦客户机之争吗?之后又是CS和BS之争,然后又是两层和多层之争...,十年之后的今天我们再回过头看这些争论,一切似乎看起来都那么理所应当:程序怎么能不分层啊?可是再想一 ...

  3. java web分层和层间数据传递 vo bo po

    还记得97年左右开始的胖客户机和瘦客户机之争吗?之后又是CS和BS之争,然后又是两层和多层之争...,十年之后的今天我们再回过头看这些争论,一切似乎看起来都那么理所应当:程序怎么能不分层啊?可是再想一 ...

  4. POJO/DTO/DO/EO/VO/BO/PO/AO的含义和使用

    关于POJO/DTO/DO/EO/VO/BO/PO/AO 本文讨论 POJO/DTO/DO/EO/VO/BO/PO/AO 的定义,另外讨论了这些xO在controller.service.dao/ma ...

  5. 转贴一个关于DTO DAO VO BO PO POJO的^_^

    DTO DAO VO BO PO POJO- - potian 写道: 辨别一些名词: 1.VO:实际上很模糊,通常指ValueObject和ViewObject 2. ViewObject,界面展现 ...

  6. vo、po、dto、bo、pojo、entity、mode如何区分

    Java Bean:一种可重用组件,即"一次编写,任何地方执行,任何地方重用".满足三个条件 类必须是具体的和公共的 具有无参构造器 提供一致性设计模式的公共方法将内部域或暴露成员 ...

  7. 项目开发中,真的有必要定义VO,BO,PO,DO,DTO这些吗?

    点击关注公众号,实用技术文章及时了解 存在即是合理的,业务复杂,人员协同性要求高的场景下,这些规范性的东西不按着来虽然不会出错,程序照样跑,但是遵守规范会让程序更具扩展性和可读性,都是前辈血淋淋的宝贵 ...

  8. IT 开发常见 英文简称 VO, BO, PO的讲解

    vo=持久对象, 与数据库表一一对应 bo=业务对象, 来自vo, 但是是跟表单一一对应, 是vo满足业务逻辑的特殊实现, 就是说可能多个bo都来自同一个bo VO和PO的主要区别在于: Ø VO是独 ...

  9. entity、bo、vo、po、dto、pojo如何理解和区分?

    Entity 最常用实体类,基本和数据表一一对应,一个实体一张表. Bo(business object) 代表业务对象的意思,Bo就是把业务逻辑封装为一个对象(注意是逻辑,业务逻辑),这个对象可以包 ...

最新文章

  1. Python机器学习基础教程-第2章-监督学习之K近邻
  2. 生产订单成本的计划、控制和结算
  3. 解决java.net.ConnectException: Connection refused:connect报错
  4. java linklist 遍历_Java LinkList遍历方式
  5. Lucene入门与使用(一) [转]
  6. ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)
  7. linux查找符合条件的文件并删除
  8. 安装Electron
  9. zencart 批量修改价格
  10. IBM SPSS Modeler 【4】 神经网络模型的测试验证
  11. 区块链开源代码什么意思_区块链和开源社区有什么共同点
  12. c语言pow函数原型_c语言中的pow()函数怎么用
  13. adobe photoshop cs6 安装
  14. X310工作原理及设备描述详细信息
  15. 官方scratch3.0正式发布,全面支持移动设备在线编程!
  16. 马丘比丘的落日(简略秘鲁征服史)
  17. ubuntu 下安装labelImg报错
  18. 华为OD机试 九宫格按键输入法
  19. 解决M1芯片Mac版Maxon Cinema 4D R23 安装不上问题 Mac M1 C4DM1中文直装版安装教程 支持MAC M1芯片处理器
  20. [C#.Net]全局钩子实现USB扫码枪无焦点状态下扫入

热门文章

  1. PHP多进程 - opcode缓存与用户缓存(APC, XCache, eAcclerator,Zend Opcache,Yac)
  2. Unity Gamma Linear Color Space
  3. S3C2440A中断小记
  4. Pytorch CPU Tensor与GPU Tensor的运算速度对比测试
  5. HBU-NNDL 实验四 线性分类
  6. Validation and Data leakages
  7. 180天如何突击高考-从400到550?
  8. 2.6 zio入门——对比Future
  9. 2022阿里巴巴技术类笔试题分享(含答案)
  10. r3kapig:校园明星 CTF 战队的奇幻养成之旅