Đầu tiên, sự khác biệt chính là ViewModel có thể có hành vi hoặc phương thức mà DTO Không được !!!
Thứ hai, việc sử dụng DTO làm ViewModel trong ASP.NET MVC làm cho ứng dụng của bạn được kết hợp chặt chẽ với DTO và đó chính xác là mục đích ngược lại của việc sử dụng DTO. Nếu bạn làm như vậy, sự khác biệt khi sử dụng Model miền hoặc DTO của bạn, phức tạp hơn để có được một anti-pattern?
Ngoài ra ViewModel trong ASP.NET có thể sử dụng DataAnnotations để xác thực.
Cùng một DTO có thể có các Ánh xạ ViewModels khác nhau và Một ViewModel có thể được tạo từ các DTO khác nhau (luôn luôn có ánh xạ đối tượng không phải là thành phần). bởi vì tôi nghĩ thậm chí còn tệ hơn nếu bạn có ViewModel chứa DTO, chúng ta sẽ gặp vấn đề tương tự.
Từ lớp bản trình bày của bạn, hãy nghĩ về DTO như một hợp đồng, bạn sẽ nhận được một đối tượng mà bạn phải coi là xa lạ với ứng dụng của mình và không có bất kỳ quyền kiểm soát nào đối với nó (ngay cả khi bạn có dịch vụ cũ, lớp dto và lớp trình bày là của bạn à).
Cuối cùng, nếu bạn thực hiện tách biệt rõ ràng này, các nhà phát triển có thể làm việc cùng nhau một cách dễ dàng. Người thiết kế ViewModels, Views và Controllers không phải lo lắng về lớp dịch vụ hoặc việc triển khai DTO bởi vì anh ta sẽ lập bản đồ khi những người phát triển khác hoàn thành việc triển khai của họ ... Anh ta thậm chí có thể sử dụng công cụ Mocking hoặc mô phỏng thủ công để lấp đầy lớp trình bày với dữ liệu để kiểm tra.