Professional Documents
Culture Documents
comp=28162
www.devmedia.com.br
[versão para impressão]
Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=28162
Dentre tantos padrões existentes, alguns são muito famosos pela genialidade de sua
criação enquanto outros deixam muitos usuários confusos quanto a como e onde usar e
as suas diferenças em relação a outros padrões semelhantes. O pattern DAO, por
exemplo, é muito conhecido e usado no mundo de desenvolvimento de software em
1 de 6 07/02/2014 13:38
Diferença entre os patterns PO, POJO, BO, DTO e VO http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=28162
Orientação a Objetos, entretanto muitos confundem a real diferença entre este padrão e o
padrão Repository.
2 de 6 07/02/2014 13:38
Diferença entre os patterns PO, POJO, BO, DTO e VO http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=28162
Esse padrão é muito usado em conjunto com o framework de persistência ORM Hibernate.
Representa apenas um objeto de persistência simples com atributos, métodos de
recuperação e setagem, muito semelhante ao VO ou TO (Transfer Object), porém sem
nenhuma referência a códigos de transação com o banco de dados.
O próprio nome já diz muito: um objeto simples usado para transferir dados de um local a
outro na aplicação, sem lógica de negócios em seus objetos e comumente associado à
transferência de dados entre uma camada de visão (view layer) e outra de persistência
dos dados (model layer). Muito frequentemente você verá esse padrão sendo usado em
conjunto com um DAO. Veja na Figura 2 um exemplo claro dessa representação e desse
conjunto entre os dois padrões.
Esse padrão também é bastante usado quando não se deseja expor a camada de
persistência, porém é preciso que sejam exibidos os mesmos dados na camada de
3 de 6 07/02/2014 13:38
Diferença entre os patterns PO, POJO, BO, DTO e VO http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=28162
apresentação. Por exemplo, considere uma tela de uma aplicação que necessite listar os
dados de 10 pessoas cadastradas em uma tabela. Para acessar estes dados, a camada de
persistência assim o faz com a listagem configurada em um ArrayList de 10 PO’s (vide
padrão acima). Para passar esses valores à tela, a mesma lista antes tem de ser
convertida para uma lista de DTO’s com mesmos atributos e métodos get’s/set’s. Tudo
isso porque a mesma aplicação faz uso do JPA, por exemplo, ou Hibernate e os mesmos
frameworks não permitem que os dados tidos como “lazy (preguiçosos)” perdurem até
depois de a conexão ter sido fechada. Por tal razão a conversão se faz necessária e assim
os dados poderão fazer o trajeto sem serem perdidos ou sem que nenhum erro de
conexão venha a acontecer.
“Nós nos perguntamos por que as pessoas eram tão contra o uso de objetos regulares em
seus sistemas e concluímos que era porque faltava um nome fantasia para os objetos
simples. Assim, demos-lhes um, e caiu muito bem.”
Resumindo, é um termo usado para denotar um objeto Java que não segue nenhum dos
conceitos principais dos modelos de objetos Java, convenções e frameworks.
4 de 6 07/02/2014 13:38
Diferença entre os patterns PO, POJO, BO, DTO e VO http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=28162
Figura 3: Por mais simples que seja, são considerados objetos centrais e importantes em
um projeto OO
Basicamente sua função é encapsular a lógica de negócios para um objeto (que pode
incluir vários POs e geralmente precisam de um BO em um PO). Um PO pode ser um BO
no final das contas, mas antes precisa ser convertido para tal.
5 de 6 07/02/2014 13:38
Diferença entre os patterns PO, POJO, BO, DTO e VO http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=28162
3. Ambos.
Isso parece confuso quando pensamos em objetos Java atuando como POJOs simples.
Definições a parte, esse padrão até hoje sofre alterações em suas explicações. Alguns o
definem de uma forma outros a sua maneira, etc. É um objeto usado basicamente para
exibir dados na camada de apresentação. Uma noção formal do que é de fato um “value
object” pode ser encontrada na JEP 169 (Vide links).
http://openjdk.java.net/jeps/169
Diogo Souza
Diogo Souza trabalha como Analista de Sistemas Java na Indra Company e já trabalhou em empresas como
Instituto Atlântico e Ebix L.A. É instrutor Android, palestrante em eventos sobre Java e o mundo mobile e
consultor DevMedia. Con [...]
6 de 6 07/02/2014 13:38