POJO、Entity、PO、VO、DTO、DO区别
注意:如果项目不复杂只采用
DTO作为controller和service的数据传输媒介。
POJO (Plain Ordinary Java Object)
实质是普通的JavaBean对象,包含一些属性及其getter、setter方法,不包含业务逻辑方法,有时候可以作为VO和DTO使用。
Entity(PO)
每个属性基本上都对应数据库表里面的某个字段。完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。持久对象是由insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。
VO
表现层对象(View Object),主要对应展示界面显示的数据对象,用一个VO对象来封装整个界面展示所需要的对象数据。
- VO通常与前端展示相关,是展示给最终用户的数据的模型。
- 在某些情况下,VO可能与DTO非常相似,甚至相同,特别是当Service层直接为Controller层提供数据时。
- 然而,在某些复杂的场景下,VO可能会包含一些额外的数据或逻辑,这些数据或逻辑对于Service层来说是不必要的,但对于前端展示来说是必要的。
DTO
数据传输对象(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。简单来说,当我们需要一个对象10个字段的内容,但这个对象总共有20个字段,我们不需要把整个PO对象全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。此时,如果这个对象用来对应界面的展现,就叫VO。(注意:用于作为函数参数接收前端form提交参数)
- DTO主要用于在不同层(如Service层和Controller层)之间传输数据。
- DTO通常不包含业务逻辑或持久化逻辑,只是数据的简单容器。
- DTO可以根据需要进行定制,只包含需要传输的属性,从而减少不必要的数据传输和暴露。
- DTO可以用于响应客户端的请求,或者从客户端接收数据。
VO、DTO、DO、PO应用场景
用户填写表单并且提交到后端服务器,后端服务的表现层将用户的数据转换为VO对象,表现层将VO对象转换为服务层调用时所需要的DTO对象后调用服务层接口,服务层将DTO对象转换为DO对象后调用DO的业务方法,业务层把DO对象转换为PO对象后调用ORM持久化层把PO持久化。对于一个逆向操作,如读取数据,也是用类似的方式转换和传递,略。