In primo luogo, la principale differenza è che ViewModel può avere comportamenti o metodi che DTO non deve !!!
In secondo luogo, l'utilizzo di DTO come ViewModel in ASP.NET MVC rende l'applicazione strettamente accoppiata a DTO e questo è esattamente lo scopo opposto dell'utilizzo di DTO. In tal caso, qual è la diffrenza utilizzando il modello di dominio o DTO, più complessità per ottenere un anti-pattern?
Anche ViewModel in ASP.NET può utilizzare DataAnnotations per la convalida.
Lo stesso DTO può avere un diverso ViewModels Mapping e One ViewModel può essere composto da diversi DTO (sempre con mappatura oggetto non composizione). perché penso che sia anche peggio se hai un ViewModel che contiene un DTO, avremo lo stesso problema.
Dal tuo livello di presentazione, pensa a DTO come un contratto, riceverai un oggetto che devi considerare estraneo alla tua applicazione e non hai alcun controllo su di esso (anche se hai già il servizio, il dto e gli strati di presentazione sono tuoi).
Infine, se si esegue questa separazione netta, gli sviluppatori possono lavorare insieme con facilità. La persona che progetta ViewModels, Views e Controllers non deve preoccuparsi del livello di servizio o dell'implementazione DTO perché eseguirà il mapping quando gli altri sviluppatori completeranno la loro implementazione ... Può persino usare lo strumento Mocking o il mocking manuale per riempire il livello di presentazione con i dati per il test.
fonte
2012-12-27 18:09:16
Penso che sia importante menzionare che ViewModels in ASP.NET MVC non sono equivalenti al 100% a ViewModels in WPF (MVVM), poiché la maggior parte delle risposte menziona MVVM e si sta lavorando con ASP.NET MVC. –