Explicação popular:
VO: (View Object): Exibir objeto, usado para exibir a camada.
DTO (Data Transfer Object): objeto de transferência de dados
DO (Domain Object): objeto de domínio, que é uma entidade comercial tangível ou intangível abstraída do mundo real.
PO (Persistent Object): Objeto persistente, que forma um relacionamento de mapeamento um-para-um com a estrutura de dados da camada de persistência (geralmente um banco de dados relacional).
Meu próprio entendimento:
Direção: Backend –> Frontend
VO: Os dados usados pela página do frontend são exibidos e o backend é passado para o frontend.
Direção: front-end -> back-end
DTO: Quando o front-end chamar a interface de back-end, passe para o back-end
DO: Após receber o DTO no controlador, crie um novo DO e passe para o serviço,
PO: Após o serviço receber o DO passado, converta-o em um PO, passe-o para o método mapeador e execute o processamento de persistência.