Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Data Transfer Object (DTO) vs Value Object (VO)

73 views
Skip to first unread message

Massimo S.

unread,
Mar 16, 2009, 6:55:57 PM3/16/09
to
Come per l'altro post vorrei sapere la differenza fra questi pattern.
Pure in questo caso ho trovato "pareri" contrastanti.

Alcuni dicono che sono esattamente la stessa cosa, che sono sinonimi.

Un mio collega dice che i vo si usano per passare i dati tra i vari
layer: dao -> bussiness -> presentation mentre i dto si usano (ad
esempio in ambito struts 1.x) per passare i dati da le action e le jsp
e viceversa ed inoltre che i dto devono avere tutti i campi di tipo
String, anche quelli che nei corrispettivi vo sono di altro tipo come
int.

Su un altro sito avevo letto, al contrario, che i dto si usano per
passare i dati tra i layer mentre i vo si usano solo in presentazione
e devono avere un ciclo di vita breve.

Pure qui qualcuno mi può dare delucidazioni?

Grazie

cicap

unread,
Mar 16, 2009, 7:13:38 PM3/16/09
to
Il Mon, 16 Mar 2009 15:55:57 -0700, Massimo S. ha scritto:

> Pure qui qualcuno mi può dare delucidazioni?

I DTO servono per passare dati tra i vari sottosistemi di un'applicazione.
La Sun ha cominciato con chiamarli VO, per poi ricredersi a rinominarli in
DTO.

Il termine VO esiste da prima di Java, ed è descritto qui:

http://c2.com/cgi/wiki?ValueObject

Diciamo che la Sun ha fatto un gran casino ;)

Massimo S.

unread,
Mar 17, 2009, 6:29:09 PM3/17/09
to

Provo a buttare un altro po di carne sul fuoco :-)

Ho letto che il DTO sarebbe diventato un antipattern (cioè non va
usato) se si usa qualcosa tipo hibernate o gli entity beans di EJB 3.0
Che ne pensate?

E già che ci siamo: ha senso usare il pattern DAO insieme a hibernate
o gli entity beans di EJB 3.0 ?

cicap

unread,
Mar 18, 2009, 4:01:53 AM3/18/09
to

Innanzittutto non mi sembra che chiedere curiosità sia il modo
corretto di approfondire l'argomento Design Pattern.

Comunque, i DTO servono a passare dati tra due sottosistemi. Qualora
vi fosse questa necessità, non vedo perchè debbano costituire un
antipattern.

In generale Hibernate consente un mapping di alto livello tra il tuo
dominio ad oggetti e il mondo relazionale dei database. Per questo
motivo può eliminare la necessità di un DTO tra lo strato di
persistenza e quello di business.
Ma rimangono aperti altri ambiti. Nei webservice, ad esempio, l'uso
dei DTO non è eliminabile.

I DAO hanno senso anche con EJB3, se ne senti la necessità. La cosa
interessante è che con EJB3 un DAO può tranquillamente essere
implementato tramite session bean:

@Stateless
public class UserDaoBean implements UserDao {
@PersistenceContext
EntityManager em;

...
}

0 new messages