POJO、DO/PO、BO、VO、DTO的区别与联系

最近看到好多O,DO/PO、BO、VO、DTO等等,这么多O不都是POJO吗,有必要分这么细吗?

POJO 是什么?为什么会有 POJO ?

POJO(Plain Ordinary Java Object)
简单的java对象,是为了避免和 EJB 混淆而创建的简称。在POJO下,又有DO/PO、BO、VO、DTO的分类。

POJO的特点:只有setter/getter/toString的简单方法,没有业务逻辑,所以称作普通的简单的java对象。

回忆一下 EJB

EJB(Enterprise Java Beans)是基于分布式事务处理的企业级应用程序的组件。

Sun 公司发布的文档对EJB的定义是:EJB 是用于开发和部署多层结构的、分布式的、面向对象的 Java 应用系统的跨平台的构件体系结构。也就是说EJB是以组件为基础的技术模型。

EJB 的架构主要包括:EJB 类,EJB 对象,Remote接口、Home接口。

EJB 类,包含了组件的实现细节,是实际完成Bean功能的地方。EJB容器根据需要调用这个类对Bean进行实例化。

EJB 对象,在服务器端,一个 EJB 对象是一个实现了bean的远程接口的分布式对象,它在服务器端包装了bean的实例。EJB对象由容器控制在适当的时机调用所需的服务,这些服务对于客户端是透明的。
Remote接口,根据 EJB 规范,所有的 Remote接口都必须来源于一个通用的接口,包含了 EJB 对象必须实现的方法。

Home接口,开发者必须定义Home接口,容器厂商则提供从Home接口中产生Home对象实现的方法。
好复杂的 EJB ,还是回过头来看 POJO 吧。

PO/DO 和 DAO层的关系

PO(Persistent Object)/DO(Data Object)持久化对象/数据对象,与数据库表结构一一对应,一个PO/DO对象是表中的一条数据。PO/DO只是数据的对象,不包含任何操作。

在分层系统里,一般将系统分为DAO层、Service层、Controller层、视图层。

DAO(Data Access Object)数据访问层对象,封装对数据库的访问,常规的增删改查(CRUD操作)都通过DAO层的DAO类实现。而 DO/PO属于DAO层,是用来支持DAO层类操作的协助类。

业务层的 BO

BO(Business Object)业务对象,把业务逻辑要处理的基础数据封装为一个对象。在分层系统里,BO作用于Service层,是用来支持Service层类操作的协助类。
在领域模型中,BO是一个非常重要的概念,BO是最小的业务单元。BO包含数据对象(PO/DO)以及对数据的操作。

视图层的 VO

VO(View Object/Value Object)表示层对象,和视图模型打交道的数据对象,主要用于客户端的数据展示。在分层系统里,VO作用于视图模型层,是支持数据展示的协助类。

DTO又是什么?

DTO(Data Transfer Object)数据传输对象,在分布式系统中,系统之间可以通过DTO进行数据传输。DTO也可以应用在应用内部,DTO只是简单的数据传输,没有业务逻辑的处理。

最后总结

在规模比较小的项目里,对于POJO不用分这么细,一个DO数据对象在DAO层、Service层、Controller层和视图层之间来回应用。

如果项目做了前后端分离,在列表页面的展示涉及到几个表的查询,这时候DO/PO就不够用了,那么VO的作用就体现出来了,服务器端需要把页面需要的数据封装成一个数据对象返回给客户端,这就是VO表示层对象,只作用于视图层数据的展示。当然,很多小公司这一步也省了,一个json对象,一个map对象搞定。

至于BO,也和VO的应用类似,只不过它要封装的是业务层的数据。而DTO,则是用来封装系统间传输数据的对象。总之,它们都是POJO。

你可能感兴趣的:(POJO、DO/PO、BO、VO、DTO的区别与联系)