区分POJO、DTO、DO、VO、BO、PO、Entity

简述

VO 用于后端向前端传输数据;

DTO用于前端向后端传输数据;

BO用于微服务之间传输数据;

PO等同于Entity,DO是Entity的一种,三者用于表示数据库的一条记录,通常用Entity。

(1)POJO

普通Java对象POJO(Pure Old Java Object 、 Plain Ordinary Java Object),按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,简称“简单java对象”。包含DO、DTO、BO、VO和PO等,它们本质上都是一个简单的java对象,实际就是普通的JavaBeans。没有业务逻辑,有时可以作为VO或DTO来使用。

POJO是指这样的java对象:

  • 有一些private的参数作为对象的属性
  • 针对每一个参数定义get和set方法
  • 没有从任何类继承
  • 没有实现任何接口
  • 没有被其它框架侵入。

(2)VO

VO(View Object)视图模型,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。如果是一个DTO对应一个VO,则DTO等价于VO;但是如果一个DTO对应多个VO,则展示层需要把VO转换为服务层对应方法所要求的DTO,传送给服务层,从而达到服务层与展示层解耦的效果。

一般用在业务逻辑层(Service)对前端(Web) 的视图模型效果控制的展示上,说白了就是后台向前端传输数据。示例:xxxVO,xxx一般为网页名称。注:在展示业务不复杂的系统,可直接使用DTO

(3)DTO

数据传输对象DTO(Data Transfer Object)是一个比较特殊的对象,它有两种存在形式:在后端,它的存在形式是java对象,也就是在controller里面定义的请求参数,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架;在前端,它的存在形式通常是js里面的对象(也可以简单理解成json),即通过ajax请求的那个数据体。这也是为什么把他画成横跨两层的原因。举个例子,xxxDTO,xxx为业务领域相关的名称。

现在微服务盛行,服务和服务之间调用的传输对象能叫DTO吗?我的理解是看情况,DTO的一个隐含意义是要能够完整的表达一个业务模块的输出。如果服务和服务之间相对独立,那就可以叫DTO;如果服务和服务之间不独立,每个都不是一个完整的业务模块,拆开可能仅仅是因为计算复杂度或者性能的问题,那这就不能够叫做DTO,只能是BO。

DTO与BO或者DO的区别是DTO没有任何行为(方法),只是存储和提供它所拥有数据的查询(访问器和修改器)。DTO是简单对象,不包含任何需要测试的业务逻辑。

(4)Entity/PO

持久化对象PO(Persistent Object)等同于Entity,它们的概念是一致的。数据库表中的记录在java对象中的显示状态。最形象的理解就是一个PO对象对应数据库中的一条记录,一个PO的数据结构对应着库中一张表的表结构,即自身属性与数据表字段一一对应。好处是可以把一条记录作为一个对象处理,方便的转为其它对象。

例如我们有一条数据,现在有一个简单类而且已经是被赋予了这条数据的实例,那么这条数据在这个简单类中的存在状态就是PO,不管这个简单类是DO还是BO抑或其它。PO只是数据持久化的一个状态。

通常PO里面除了get,set之外没有别的方法。对于PO来说,数量是相对固定的,一定不会超过数据库表的数量。

(5)DO

领域对象 DO(Domain Object) 是从现实世界中抽象出来的有形或无形的业务实体,它用来接收数据库对应的实体,是一种抽象化的数据状态,介于数据库与业务逻辑之间。

一般在业务逻辑层(Service)对数据库(SQL) 进行访问时,用于接收数据。xxxDO,xxx即为数据表名。另外,DO与Entity的不同点就是DO是与数据库存在着某种映射关系的Entity,总的来说DO是Entity的一种。

(6)BO

业务对象(Business Object,BO)是对数据进行检索和处理的组件,主要作用是把业务逻辑封装为一个对象,这个对象可以包括一个或多个其它的对象。形象描述为一个对象的形为和动作,当然也有涉及到其它对象的一些形为和动作。

BO通常位于中间层或者业务逻辑层。BO支持序列化和反序列化,可以轻易地将BO的Java实例转换为一个XML文件或者一个流保存起来,并且在需要的时候,将这个BO从XML或者流中转换回一个Java实例。举个简单的例子,一个简历包含教育经历、工作经历、社会关系等三个模块,每个模块对应一个PO;建立一个BO对象处理简历,则每个BO包含这三个PO。

应用中的所有实体(Entity)都是BO,但并不是所有BO都是实体。BO包括包含方法的实体对象(Entity Object)和不包含方法的值对象(VO)。

放置目录

  • PO 通常放在名为 bean、entity、model 目录中
  • DAO 通常在 DAO、mapper 目录中
  • BO 通常在service、manager、business 目录中

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值