PO(Persistent Object)
持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系。
DTO(Data Transfer Object)
数据传输对象,是一种设计模式之间传输数据的软件应用系统。
数据传输目标往往是数据访问对象从数据库中检索数据。
方便数据交互,在这里泛指用于展示层与服务层之间的数据传输对象
VO(Value Object)
VO是显示视图模型,视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
个人理解:
概念上两者有着本质的区别,DTO 代表服务层需要接收的数据和返回的数据,而 VO 代表展示层需要显示的数据。
既然DTO是展示层与服务层之间传递数据的对象,为什么还需要一个VO呢?
在只有一个客户端的情况下DTO=VO,DTO和VO的属性值基本是一致的,因此没必要多此一举。
但是在有两个客户端的情况下,比如说客户端A把性别男显示为男生,客户端B把性别男显示为帅哥(客户定制化需求),此时需要两个VO(这是设计层面上的思维,实现层面你可能认为不需要两个VO),如果一个DTO对应多个VO,则展示层需要把VO转换为服务层对应方法所要求的DTO,传送给服务层。从而达到服务层与展示层解耦的效果。