真的有必要定义VO,BO,PO,DO,DTO吗?
今天给大家带来一篇关于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,而且团队内要达成共识,形成一个标准规范。
- 业务复杂,人员协同性要求高的场景下,这些规范性的东西不按着来虽然不会出错,程序照样跑,但是遵守规范会让程序更具扩展性和可读性;
- 让类语义更明确,很容易知道类的含义;
其实就是提升项目的可扩展性、可维护性与可阅读性。
提升这些性能的尽头是经济效益。
总结
这篇文章很短,最后稍微总结一下,不管用哪种方式,只要团队内定义好一种适应的协同规范就行。
没有一个绝对好与绝对坏的方式方法。
团队规范的尽头能提升项目的可扩展性、可维护性与可阅读性,从而降低bug率。
另附这些概念命名规范:
- 数据对象:xxxPO,xxx即为数据表名。(也可DO)
- 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
- 展示对象:xxxVO,xxx一般为网页名称。
- 业务对象:xxxBO,xxx是业务名称。
真的有必要定义VO,BO,PO,DO,DTO吗?相关推荐
- VO BO PO DO DTO DAO POJO概念及区别
VO BO PO DO DTO DAO POJO 概念及区别 1.VO( value object) 即值对象 VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看 ...
- java web分层和层间数据传递 vo bo po (转载)
还记得97年左右开始的胖客户机和瘦客户机之争吗?之后又是CS和BS之争,然后又是两层和多层之争...,十年之后的今天我们再回过头看这些争论,一切似乎看起来都那么理所应当:程序怎么能不分层啊?可是再想一 ...
- java web分层和层间数据传递 vo bo po
还记得97年左右开始的胖客户机和瘦客户机之争吗?之后又是CS和BS之争,然后又是两层和多层之争...,十年之后的今天我们再回过头看这些争论,一切似乎看起来都那么理所应当:程序怎么能不分层啊?可是再想一 ...
- 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 ...
- 转贴一个关于DTO DAO VO BO PO POJO的^_^
DTO DAO VO BO PO POJO- - potian 写道: 辨别一些名词: 1.VO:实际上很模糊,通常指ValueObject和ViewObject 2. ViewObject,界面展现 ...
- vo、po、dto、bo、pojo、entity、mode如何区分
Java Bean:一种可重用组件,即"一次编写,任何地方执行,任何地方重用".满足三个条件 类必须是具体的和公共的 具有无参构造器 提供一致性设计模式的公共方法将内部域或暴露成员 ...
- 项目开发中,真的有必要定义VO,BO,PO,DO,DTO这些吗?
点击关注公众号,实用技术文章及时了解 存在即是合理的,业务复杂,人员协同性要求高的场景下,这些规范性的东西不按着来虽然不会出错,程序照样跑,但是遵守规范会让程序更具扩展性和可读性,都是前辈血淋淋的宝贵 ...
- IT 开发常见 英文简称 VO, BO, PO的讲解
vo=持久对象, 与数据库表一一对应 bo=业务对象, 来自vo, 但是是跟表单一一对应, 是vo满足业务逻辑的特殊实现, 就是说可能多个bo都来自同一个bo VO和PO的主要区别在于: Ø VO是独 ...
- entity、bo、vo、po、dto、pojo如何理解和区分?
Entity 最常用实体类,基本和数据表一一对应,一个实体一张表. Bo(business object) 代表业务对象的意思,Bo就是把业务逻辑封装为一个对象(注意是逻辑,业务逻辑),这个对象可以包 ...
最新文章
- Python机器学习基础教程-第2章-监督学习之K近邻
- 生产订单成本的计划、控制和结算
- 解决java.net.ConnectException: Connection refused:connect报错
- java linklist 遍历_Java LinkList遍历方式
- Lucene入门与使用(一) [转]
- ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)
- linux查找符合条件的文件并删除
- 安装Electron
- zencart 批量修改价格
- IBM SPSS Modeler 【4】 神经网络模型的测试验证
- 区块链开源代码什么意思_区块链和开源社区有什么共同点
- c语言pow函数原型_c语言中的pow()函数怎么用
- adobe photoshop cs6 安装
- X310工作原理及设备描述详细信息
- 官方scratch3.0正式发布,全面支持移动设备在线编程!
- 马丘比丘的落日(简略秘鲁征服史)
- ubuntu 下安装labelImg报错
- 华为OD机试 九宫格按键输入法
- 解决M1芯片Mac版Maxon Cinema 4D R23 安装不上问题 Mac M1 C4DM1中文直装版安装教程 支持MAC M1芯片处理器
- [C#.Net]全局钩子实现USB扫码枪无焦点状态下扫入
热门文章
- PHP多进程 - opcode缓存与用户缓存(APC, XCache, eAcclerator,Zend Opcache,Yac)
- Unity Gamma Linear Color Space
- S3C2440A中断小记
- Pytorch CPU Tensor与GPU Tensor的运算速度对比测试
- HBU-NNDL 实验四 线性分类
- Validation and Data leakages
- 180天如何突击高考-从400到550?
- 2.6 zio入门——对比Future
- 2022阿里巴巴技术类笔试题分享(含答案)
- r3kapig:校园明星 CTF 战队的奇幻养成之旅