Ciao a tutti
I DTO (data transfer object) sono degli oggetti generalmente utilizzati per lo scambio di informazioni tra due o più tier della nostra applicazione distribuita.
Ricordiamo che: un tier è un componente distribuito che puo contenere uno o più layer logici ma che risiede su un altro sistema nei confronti degli altri layer che compongono la nostra applicazione. Es: un web fatto da front-end e back-end tipicamente ha 2 tier uno che gira si un server e l'altro su di un secondo server. Anche se si dovessero appiattire i due tier sullo stesso server fisico, poichè la comunicazione rimane si su di un protocollo di scambio di rete, saranno sempre due tier separati. Diversamente un layer è un insieme di classi e interfacce (eventualmente un namespace) che ha un compito a se stante. Es: il layer dati, il layer di presentation e altri...
Un DTO quindi è quell'oggetto che viene scambiato tra due tier, nell'esempio quello scambiato tra back-end e front-end, solitamente suddiviso tra request e response. In genere è usato per limitare l'accesso alla risorsa remota (il servizio ad esempio) perchè fornisce tutto l'elemento richiesto comprensivo delle entità a lui collegate a loro volta complete di tutti le loro property.
In Java spesso ci si riferisce ai DTO chiamandoli VO (value object).
Secondo Fowler invece, un VO è un oggetto value-type (una structure in .NET) che appunto differentemente da un DTO, benchè in genere di piccole dimensioni e popolato principalmente da property, essendo gestito come un value-type viene confrontato per i suoi valori e non per un identificativo come un ID che potremmo mettere nella classe Person. Un value object è quindi in genere un tipo di valore che possiamo avere, ad esempio un indirizzo definito come strada, numero, città e cap.... che non ha ID, ma è un valore composto, e che se confrontato per verificarne l'uguaglianza andremmo a verificare che tutte le sue proprietà siano uguali.