सबसे पहले, प्रमुख अंतर यह है कि ViewModel में व्यवहार या तरीके हो सकते हैं जो डीटीओ को नहीं होना चाहिए !!!
दूसरा, ASP.NET MVC में एक ViewModel के रूप में डीटीओ का उपयोग करना आपके आवेदन को डीटीओ से कसकर जोड़ देता है और यह डीटीओ का उपयोग करने का बिल्कुल विपरीत उद्देश्य है। यदि आप ऐसा करते हैं, तो आपके डोमेन मॉडल या डीटीओ का उपयोग करने में क्या अंतर है, एक विरोधी पैटर्न प्राप्त करने के लिए अधिक जटिलता?
इसके अलावा ASP.NET में ViewModel सत्यापन के लिए DataAnnotations का उपयोग कर सकता है।
एक ही DTO में अलग-अलग ViewModels मैपिंग हो सकते हैं, और One ViewModel को विभिन्न DTO (हमेशा ऑब्जेक्ट मैपिंग नहीं रचना के साथ) से बनाया जा सकता है। क्योंकि मुझे लगता है कि यह और भी बुरा है अगर आपके पास एक ViewModel है जिसमें एक DTO होता है, तो हमें भी यही समस्या होगी।
अपनी प्रस्तुति परत से, अनुबंध के रूप में डीटीओ के बारे में सोचें, आपको एक वस्तु प्राप्त होगी जिसे आपको अपने आवेदन के लिए अजनबी समझना होगा और उस पर कोई नियंत्रण नहीं होना चाहिए (भले ही आपके पास सेवा पूर्व, डीटीओ और प्रस्तुति परतें हों आपके है)।
अंत में यदि आप यह साफ जुदाई करते हैं, तो डेवलपर आसानी से एक साथ काम कर सकते हैं। जो व्यक्ति ViewModels, Views और Controllers डिज़ाइन करता है, उसे सेवा की परत या DTO कार्यान्वयन के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि वह मैपिंग करेगा जब अन्य डेवलपर्स उनके कार्यान्वयन को समाप्त कर देंगे ... वह भरने के लिए Mocking टूल या मैनुअल मॉकिंग का भी उपयोग कर सकते हैं। परीक्षण के लिए डेटा के साथ प्रस्तुति परत।