实体类PO、DO、VO、DTO的区分

一直搞不太清楚实体类为什么要区分这4种类型,这4种类型分别是什么场合能够用到,查阅了许多资料,并加入了自己的理解,写下了这篇博客,参考了这篇博客

什么是实体类

实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。

VO与DO(view Object 和 Domain Object)

vo实体类中定义的字段即为页面上想要展示的字段,DO实体类定义的字段为数据库的字段

比如这张数据库的表

DO实体类的字段必须与数据库一一对应,但是一般我们在页面上展示时不会暴露password字段,因此VO实体类中则无需将password字段写进去

DTO (Data Transfer Object)

DTO不具备实体对象密切相关的方法(不确定),它用于展示层与服务层之间的数据传输对象,项目需求简单时和VO相同,但是有订制化要求时,还是需要区分的,引用一个例子

下面是展示层与服务层之间的数据传输的实例

注意:

PO (Persistent Object)

PO是只含有get/set方法的POJO,现在的业务应用开发,基本上不需要区分DO与PO,PO完全可以通过JPA,Hibernate Annotations/hbm隐藏在DO之中。

总结

一般业务需要具备DO、DTO,DO为数据库字段,通过DTO转换为页面需要展示的字段,如果没有进一步的要求,则可以不需要VO,可以用thymeleaf模板、js等语言转换为需要的数据来进行前端展示(比如说isShow 字段如果为0,则前端为不显示三个字,如果为1则为显示两个字),反之亦然,前端传来的数据通过DTO去接收,转为DO字段存储进数据库

赏个🍗吧
0%