Sự khác biệt giữa Trình điều khiển trong MVC và ViewModel trong MVVM là gì?


21

Tôi không thể thấy rõ sự khác biệt giữa MVC và MVVM. Tôi cảm thấy Lệnh trong ViewModel giống như phương thức Hành động trong Trình điều khiển. Và cả Bộ điều khiển và ViewModel sẽ thông báo cho Chế độ xem để tự làm mới sau khi sửa đổi trạng thái của Mô hình thông qua Liên kết dữ liệu. Sự khác biệt chính giữa hai mẫu là gì?

Câu trả lời:


25

Bộ điều khiển và ViewModel khác nhau theo nhiều cách khác nhau.

Trong MVC, Trình điều khiển biết khung nhìn, nó có thể thay đổi Khung nhìn. Nó cũng biết Model và có thể gọi nó. Trong MVVM, ViewModel là một đại diện trừu tượng của View và không biết UI cụ thể, nó bao bọc Model theo cách để nó có thể được hiển thị như mong muốn.

Trong MVC cổ điển, bộ điều khiển chỉ là một chiến lược của View để tương tác với Model. Trên thực tế, đôi khi Bộ điều khiển thậm chí không cần thiết. Trong MVVM, bạn không cần nó, vì bạn có thể có các ViewModels khác nhau cho cùng một View nếu bạn cần các hành vi khác nhau. Trong MVC, bạn có thể có ví dụ như ReadOnlyControll hoặc AdminControll để giao tiếp với Model. Trong MVVM, bạn có thể có hai ViewModels và bạn chọn cái bạn cần cho View.

Nhưng họ có một số điểm tương đồng. Trong cả hai mẫu, Chế độ xem là một người quan sát . Trong MVC cổ điển, khung nhìn là một người quan sát mô hình, trong MVVM, nó là một người quan sát của ViewModel.

Cả hai mô hình đều có nghĩa là để cung cấp một sự tách biệt các mối quan tâm. MVVM chủ yếu nhằm mục đích cung cấp một bản tóm tắt của Chế độ xem, hoàn toàn độc lập với công nghệ UI đang sử dụng. MVC không đi xa đến thế. Trọng tâm chính của nó là phân tách các mối quan tâm, để bạn không đưa logic kinh doanh (Mô hình) vào chế độ xem.

Bạn cũng có thể tìm thấy câu trả lời này của tôi cho một câu hỏi tương tự hữu ích.

Cuối cùng, tôi nên nói rằng cả hai mô hình thuộc về cùng một gia đình. MVP, trong đó MVVM là hậu duệ là anh em ruột của MVC. Nếu bạn muốn biết nhiều hơn hãy theo liên kết này đến trang web của Martin Fowler , anh ấy sẽ giải thích mọi chi tiết.


bạn không nghĩ rằng những kiến ​​trúc mô hình xem này được hiểu rõ nhất bởi những người thực hiện chúng. Tôi tin rằng đó là vấn đề lựa chọn cho nhà phát triển. Người ta chọn MVC hoặc MVVM tùy thuộc vào việc anh ta muốn có một sự trừu tượng hóa hoàn toàn về chế độ xem với một chút quá mức (trong trường hợp MVVM).
Pankaj Upadhyay

@Pankaj Upadhyay: Cái nào bạn nên sử dụng phụ thuộc vào yêu cầu và sự lựa chọn công nghệ của bạn và cả những đặc điểm riêng của nền tảng của bạn.
Falcon

Tôi tin rằng kiến ​​trúc MVC đủ tốt cho mọi thứ, nhưng điều đó có thể là do tôi chưa gặp phải vấn đề đặc biệt cần MVVM. IMO, bạn chắc chắn cần có một số quyền kiểm soát đối với chế độ xem vì làm cho nó hoàn toàn lỏng lẻo sẽ tăng thêm lỗi trong các bản nâng cấp trong tương lai
Pankaj Upadhyay

1
@Pankaj Upadhyay: Nếu bạn muốn sử dụng cùng logic cho các công nghệ UI khác nhau thì MVP là ưu việt. Tôi không nghĩ rằng bạn nhất thiết cần một số kiểm soát về quan điểm. Nó có thể hoàn toàn độc lập và bạn cũng có thể kiểm tra ViewModels - nếu không tốt hơn. Sự phân tách tốt hơn cũng có lợi cho các nhà thiết kế vì công việc trong dự án có thể được phân vùng tốt hơn.
Falcon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.