Đầu tiên, sự khác biệt chính là ViewModel có thể có hành vi hoặc phương pháp mà DTO không thể !!!
Thứ hai, 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 của việc sử dụng DTO. Nếu bạn làm như vậy, sự khác biệt bằng cách sử dụng Mô hình miền hoặc DTO của bạn, độ phức tạp hơn để có được một mô hình chống là gì?
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ó á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ĩ rằng nó thậm chí còn tồi tệ hơn nếu bạn có một ViewModel có chứa một DTO, chúng tôi sẽ có cùng một vấn đề.
Từ lớp 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 xem là lạ đối với ứng dụng của mình và không có bất kỳ quyền kiểm soát nào (ngay cả khi bạn đã sử dụng dịch vụ, các lớp trình bày và dto là của bạn).
Cuối cùng, nếu bạn làm việc tách biệt này, người 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, Chế độ xem và Bộ điều khiển không phải lo lắng về lớp dịch vụ hoặc triển khai DTO vì anh ấy sẽ tạo ánh xạ khi người khác phát triển xong việc thực hiện ... Thậm chí anh ấy có thể sử dụng công cụ Mocking hoặc chế nhạo thủ công để điền vào lớp trình bày với dữ liệu để kiểm tra.
Nguồn
2012-12-27 18:09:16
Tôi nghĩ có liên quan đến việc ViewModels trong ASP.NET MVC không tương đương 100% với ViewModels trong WPF (MVVM), vì hầu hết các câu trả lời đều đề cập đến MVVM và bạn đang làm việc với ASP.NET MVC. –