Tôi đang bối rối. Có thể bạn có thể giúp tôi :)Hướng dẫn tổng hợp cho WPF: MVVM vs MVP
Tôi đã làm theo hướng dẫn của CAG và thấy mẫu MVP rất tự nhiên đối với tôi. Giả sử tôi có một Mô hình sẵn sàng cho UI (ví dụ: triển khai INotifyPropertyChanged), tôi sử dụng người trình bày để ràng buộc Mô hình này với chế độ xem (người trình bày biết giao diện của chế độ xem), giữ cho Code-Behind của tôi càng nhỏ càng tốt (Mô hình và lệnh) tài sản (hoặc phương pháp) hoặc các sự kiện cho điều khiển không có ICommand và trong trường hợp này ngay lập tức được giao cho người trình bày.
Sau một thời gian tôi đã phát hiện ra mẫu MVVM, và cho đến nay nó đã giúp tôi. Theo như tôi có thể nói trong cách tiếp cận của tôi, tôi sẽ sử dụng MVVM chỉ khi Mô hình của tôi không sẵn sàng UI. Nhưng sẽ hợp lý hơn nếu giữ người trình bày và chỉ sử dụng một Mô hình mới, tôi không hiểu mình sẽ mất gì với loại sử dụng này. Tôi biết tôi đang thiếu cái gì đó, nhưng nó là gì :).
Đồng thời khi Chế độ xem của bạn là chung chung và có thể xử lý nhiều loại Mô hình (chẳng hạn như trong PropertyGrid). ViewModel được khuyến khích sử dụng với DataTemplate, nhưng trong trường hợp này bạn không thể tạo một Mẫu cho từng thực thể trong Mô hình của bạn, nó chỉ cần được điều tra trong thời gian chạy, bạn sẽ đề xuất điều gì?
Trong khi xem Josh Smith nói về MVVM trong screencast, tôi có cảm giác rằng việc hiển thị lại Mô hình trong ViewModel đang vi phạm DRY (không tự lặp lại), có thực sự không thể tránh khỏi? nó làm tôi ngạc nhiên không ai tranh luận về nó so với ngọn lửa ADO.Net Dynamic Data metadata classes are getting nowadays.
Hy vọng đó là rõ ràng đủ
Cảm ơn
Ariel
+1 Câu trả lời tuyệt vời tổng thể, nhưng tuyên bố cuối cùng thực sự mang về nhà. – jrista
Trong triển khai MVVM của chúng tôi, chúng tôi vẫn có Mô hình của chúng tôi được viết với ảnh hưởng của Thiết kế Driven miền cũng như một số điều đã học được từ khung công tác Đối tượng kinh doanh như CSLA đã triển khai INotifyProperyChanged. Cho đến nay vì thiết kế của chúng ta, chúng ta có ít sự sao chép nhiều hơn trong mô hình của chúng ta trong ViewModel của chúng ta, và thường chỉ cần viết một lớp ViewModel tương ứng khi chúng ta cần trừu tượng hóa các thứ khác nhau cho View như đã đề cập bởi Anderson. – jpierson