ประการแรกความแตกต่างที่สำคัญคือ ViewModel สามารถมีพฤติกรรมหรือวิธีการที่ DTO ต้องไม่ !!!
ประการที่สองการใช้ DTO เป็น ViewModel ใน ASP.NET MVC ทำให้แอปพลิเคชันของคุณเชื่อมโยงกับ DTO อย่างแน่นหนาและนั่นคือจุดประสงค์ที่ตรงกันข้ามกับการใช้ DTO ถ้าคุณทำเช่นนั้นความแตกต่างในการใช้โมเดลโดเมนหรือ DTO ของคุณมีความซับซ้อนมากขึ้นในการรับรูปแบบการต่อต้านอย่างไร
ViewModel ใน ASP.NET ยังสามารถใช้ DataAnnotations สำหรับการตรวจสอบความถูกต้อง
DTO เดียวกันสามารถมี ViewModels Mapping ที่แตกต่างกันและ One ViewModel สามารถประกอบจาก DTO ที่แตกต่างกันได้ (โดยไม่จัดองค์ประกอบการทำแผนที่วัตถุเสมอ) เพราะฉันคิดว่ามันจะแย่กว่านั้นถ้าคุณมี ViewModel ที่มี DTO เราก็จะมีปัญหาเดียวกัน
จากเลเยอร์การนำเสนอของคุณให้นึกถึง DTO เป็นสัญญาคุณจะได้รับวัตถุที่คุณต้องพิจารณาว่าเป็นคนแปลกหน้าสำหรับแอปพลิเคชันของคุณและไม่มีการควบคุมใด ๆ (แม้ว่าคุณจะมีอดีตบริการ dto และเลเยอร์การนำเสนอก็ตาม เป็นของคุณ)
ในที่สุดหากคุณทำการแยกแบบสะอาดผู้พัฒนาสามารถทำงานร่วมกันได้อย่างง่ายดาย ผู้ที่ออกแบบ ViewModels มุมมองและตัวควบคุมไม่ต้องกังวลเกี่ยวกับชั้นบริการหรือการนำ DTO ไปใช้เพราะเขาจะทำการแมปเมื่อผู้พัฒนารายอื่นดำเนินการเสร็จสิ้น ... เขายังสามารถใช้เครื่องมือจำลองหรือการจำลองด้วยตนเองเพื่อเติมเต็ม เลเยอร์การนำเสนอพร้อมข้อมูลสำหรับการทดสอบ