DTO: los objetos de transferencia de datos son exactamente como dice, contenedores para transferir datos. No tienen comportamiento, sino simplemente un grupo de setters y getters. Algunas personas los hacen inmutables y simplemente crean nuevos cuando es necesario en lugar de actualizar los existentes. Deben ser serializables para permitir la transferencia a través del cable.
Generalmente, los DTO se utilizan para enviar datos de una capa a otra a través de los límites del proceso, ya que las llamadas a un servicio remoto pueden ser costosas, por lo que todos los datos necesarios se envían a un DTO y se transfieren al cliente en un solo fragmento (granulado grueso).
Sin embargo, algunas personas usan la noción de DTO vinculados a la pantalla (nada que ver con cruzar los límites del proceso). Nuevamente, estos se completan con los datos requeridos (generalmente los datos requeridos para una pantalla en particular y podrían ser una agregación de datos de varias fuentes) y se envían al cliente.
http://blog.jpboodhoo.com/CommentView,guid,21fe23e7-e42c-48d8-8871-86e65bcc9a50.aspx
En casos simples, como ya se ha dicho, este DTO se puede usar para enlazar a la vista, pero en casos más complejos requeriría la creación de un ViewModel y la descarga de datos de DTO a ViewModel, lo que obviamente es más trabajo (cuando se aplica el patrón MVVM) .
Así que de nuevo como ya se dijo DTO! = ViewModel
y
DTO y ViewModel tienen diferentes propósitos en la vida