По-перше, основна відмінність полягає в тому, що ViewModel може мати поведінку або методи, яких DTO MUST NOT !!!
По-друге, використовуючи DTO в якості ViewModel в ASP.NET MVC, ваш додаток буде щільно пов'язане з DTO, і це точно протилежна мета використання DTO. Якщо ви так зробите, яка різниця у використанні моделі вашого домену або DTO, більш складнощі для отримання антидіаграми?
Також ViewModel в ASP.NET може використовувати DataAnnotations для перевірки.
Один і той же DTO може мати різні ViewModels Mapping, а One ViewModel може складатися з різних DTO (завжди з об'єктом відображення, а не зі складом). тому що я думаю, що це ще гірше, якщо у вас є ViewModel, який містить DTO, у нас буде та сама проблема.
З вашого шару презентації, подумайте про DTO як про контракт, ви отримаєте об'єкт, який ви повинні вважати стороннім для вашої програми та не маєте над ним ніякого контролю (навіть якщо у вас колишні сервісні, dto та презентаційні шари ваші).
Нарешті, якщо ви зробите це чисте розділення, розробники можуть працювати разом з легкістю. Людині, яка розробляє ViewModels, Views та Controllers, не потрібно турбуватися про рівень обслуговування чи реалізацію DTO, оскільки він зробить відображення, коли інші розробники закінчать свою реалізацію ... Він навіть може використовувати інструмент Mocking або ручний глузування для заповнення презентаційний шар з даними для тесту.