Po pierwsze, główna różnica polega na tym, że ViewModel może mieć zachowanie lub metody, których DTO nie może !!!
Po drugie, użycie DTO jako ViewModel w ASP.NET MVC sprawia, że aplikacja jest ściśle powiązana z DTO, a to jest dokładnie odwrotnym celem korzystania z DTO. Jeśli to zrobisz, jaka jest różnica w używaniu modelu domeny lub DTO, większa złożoność uzyskania anty-wzorca?
Również ViewModel w ASP.NET może używać DataAnnotations do walidacji.
To samo DTO może mieć różne mapowanie modeli widoków, a jeden model widoku może składać się z różnych DTO (zawsze z mapowaniem obiektów, a nie kompozycją). ponieważ myślę, że jest jeszcze gorzej, jeśli masz ViewModel, który zawiera DTO, będziemy mieli ten sam problem.
Z warstwy prezentacji pomyśl o DTO jak o umowie, otrzymasz obiekt, który musisz uznać za obcy dla swojej aplikacji i nie masz nad nim żadnej kontroli (nawet jeśli masz ex the service, warstwy DTO i prezentacji są Twoje).
Wreszcie, jeśli wykonasz tę czystą separację, programiści mogą z łatwością współpracować. Osoba, która projektuje ViewModels, widoki i kontrolery, nie musi martwić się o warstwę usług lub implementację DTO, ponieważ wykona mapowanie, gdy inni programiści zakończą implementację ... Może nawet użyć narzędzia Mocking lub ręcznego mockowania do wypełnienia warstwa prezentacji z danymi do testu.