En primer lugar, la principal diferencia es que ViewModel puede tener un comportamiento o métodos que DTO no debe tener !!!
En segundo lugar, el uso de DTO como un modelo de vista en ASP.NET MVC hace que su aplicación se conecte estrechamente a DTO y ese es exactamente el propósito opuesto de usar DTO. Si lo hace, ¿cuál es la diferencia al usar su modelo de dominio o DTO, más complejidad para obtener un antipatrón?
También ViewModel en ASP.NET puede usar DataAnnotations para la validación.
El mismo DTO puede tener diferentes Asignaciones de ViewModels, y One ViewModel se puede componer desde diferentes DTO (siempre con mapeo de objetos sin composición). porque creo que es aún peor si tienes un ViewModel que contiene un DTO, tendremos el mismo problema.
Desde su capa de presentación, piense en DTO como un contrato, recibirá un objeto que debe considerar como extraño para su aplicación y no tiene ningún control sobre él (incluso si tiene el servicio, el dto y las capas de presentación son suyas).
Finalmente, si hace esta separación limpia, los desarrolladores pueden trabajar juntos con facilidad. La persona que diseña ViewModels, Views y Controllers no tiene que preocuparse por la capa de servicio o la implementación de DTO porque hará la asignación cuando los otros desarrolladores terminen su implementación ... Incluso puede usar la herramienta de burla o burla manual para llenar la capa de presentación con datos para prueba.
Creo que es relevante mencionar que ViewModels en ASP.NET MVC no son 100% equivalentes a ViewModels en WPF (MVVM), ya que la mayoría de las respuestas mencionan MVVM y usted está trabajando con ASP.NET MVC. –