Sei sulla pagina 1di 6

Diferena entre os patterns

PO, POJO, BO, DTO e VO


Veja neste artigo a principal diferena entre os
padres de projeto e expresses BO, DTO, VO,
POJO e PO comumente confundidos quando do
desenvolvimento de um software orientado a
objetos.
Gostei (6)
(1)
Diariamente, inmeros programadores em torno do mundo lidam com
diversos problemas que devem ser resolvidos atravs de sua
implementao em uma linguagem de programao. Na grande
maioria das vezes essa mesma necessidade exigida com demasiada
rapidez e pouqussimo prazo.
Para tanto, os profissionais desenvolvedores de linguagens que fazem
uso do conceito de orientao a objetos criaram, a partir de tais
necessidades, os padres de projeto. Padres de projeto so
extremamente usados, questionados, reanalisados e exigidos por
inmeras empresas do ramo de Tecnologia da Informao
(especialmente as que desenvolvem softwares - fbricas). O conceito
to famoso que j foi usado para resolver problemas fora do ramo
de TI, com estratgias de implementao atuante, uma vez que o
modelo remete ao mundo real com exemplos de objetos agindo e
sendo tais como no cotidiano do negcio envolvido.
Dentre tantos padres existentes, alguns so muito famosos pela
genialidade de sua criao enquanto outros deixam muitos usurios
confusos quanto a como e onde usar e as suas diferenas em relao

a outros padres semelhantes. O pattern DAO, por exemplo, muito


conhecido e usado no mundo de desenvolvimento de software em
Orientao a Objetos, entretanto muitos confundem a real diferena
entre este padro e o padro Repository.

Figura 1: Livro Design Patterns - Head First


Neste artigo sero apresentadas as diferenas bsicas entre os
padres PO (Persistent Object), POJO (Plain Old Java Object), BO
(Business Object), DTO (Data Transfer Object) e finalmente o VO
(Value Object). Estes padres geram muita confuso entre os
desenvolvedores e por muitas vezes so tidos como repetidos ou
iguais, tornando assim seu uso devido indiferente.

Persistent Object PO

Esse padro muito usado em conjunto com o framework de


persistncia ORM Hibernate. Representa apenas um objeto de
persistncia simples com atributos, mtodos de recuperao e
setagem, muito semelhante ao VO ou TO (Transfer Object), porm
sem nenhuma referncia a cdigos de transao com o banco de
dados.

Data Transfer Object DTO


O prprio nome j diz muito: um objeto simples usado para transferir
dados de um local a outro na aplicao, sem lgica de negcios em
seus objetos e comumente associado transferncia de dados entre
uma camada de viso (view layer) e outra de persistncia dos dados
(model layer). Muito frequentemente voc ver esse padro sendo
usado em conjunto com um DAO. Veja na Figura 2 um exemplo
claro dessa representao e desse conjunto entre os dois padres.

Figura 2: Exemplo de unio entre os padres DTO e DAO


Esse padro tambm bastante usado quando no se deseja expor a
camada de persistncia, porm preciso que sejam exibidos os
mesmos dados na camada de apresentao. Por exemplo, considere

uma tela de uma aplicao que necessite listar os dados de 10


pessoas cadastradas em uma tabela. Para acessar estes dados, a
camada de persistncia assim o faz com a listagem configurada em
um ArrayList de 10 POs (vide padro acima). Para passar esses
valores tela, a mesma lista antes tem de ser convertida para uma
lista de DTOs com mesmos atributos e mtodos gets/sets. Tudo isso
porque a mesma aplicao faz uso do JPA, por exemplo, ou Hibernate
e os mesmos frameworks no permitem que os dados tidos como
lazy (preguiosos) perdurem at depois de a conexo ter sido
fechada. Por tal razo a converso se faz necessria e assim os dados
podero fazer o trajeto sem serem perdidos ou sem que nenhum erro
de conexo venha a acontecer.
Observao: os padres de projeto tambm no devem ser usados
em detrimento do ambiente onde se est executando o mesmo
projeto, a ideia que eles sejam abstratos o suficiente para se
adaptar, porm voc ser o autor principal disso, ento no
desconsidere o ambiente na hora de pensar em todos os cenrios
adaptveis.

Plain Old Java Object POJO


Em setembro de 2000, Martin Fowler, Rebecca Parsons e Josh
MacKenzie cunharam o novo termo para designar um objeto sem
grande valor dentro do modelo de classes de um projeto, an ordinary
Java Object. Na mesma ocasio os mesmos disseram:
Ns nos perguntamos por que as pessoas eram to contra o uso de
objetos regulares em seus sistemas e conclumos 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 no


segue nenhum dos conceitos principais dos modelos de objetos Java,
convenes e frameworks.
Os POJOs conseguem, inclusive, ser convertidos em outros padres
j citados, como:
1. POJO Persistence -> PO
2. POJO Transmission Process -> DTO
3. POJO como presentation layer -> VO

Figura 3: Por mais simples que seja, so considerados objetos


centrais e importantes em um projeto OO

Business Object BO
Um objeto de negcios um tipo de uma entidade inteligvel sendo e
agindo como um ator dentro da camada de negcio em uma
arquitetura de n camadas orientado a objeto.
Basicamente sua funo encapsular a lgica de negcios para um
objeto (que pode incluir vrios 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.

H trs conceitos principais sobre BO:


1. Contm apenas as propriedades do objeto de negcio;
2. Contm apenas os mtodos de negcio;
3. Ambos.
Durante o uso efetivo, o conceito do que correto no importante,
a chave apropriada para a aplicao prtica em suas prprias
necessidades de projeto.

Value Object VO
Esse padro um pouco confuso. Segundo a Wikipdia, um Objeto de
valor um pequeno objeto que representa uma entidade simples,
cuja igualdade no baseada em identidade: ou seja, dois objetos de
valor so iguais quando tm o mesmo valor, no necessariamente
sendo o mesmo objeto.
Isso parece confuso quando pensamos em objetos Java atuando
como POJOs simples. Definies a parte, esse padro at hoje sofre
alteraes em suas explicaes. Alguns o definem de uma forma
outros a sua maneira, etc. um objeto usado basicamente para
exibir dados na camada de apresentao. Uma noo formal do que
de fato um value object pode ser encontrada na JEP 169 (Vide
links).