2010-08-16 28 views
8

Tôi đang xây dựng một công cụ mà mục tiêu là tải xuống tệp dựa trên một vài thông số.Trách nhiệm của một ViewModel

Bước đầu tiên là đặt (hoặc truy xuất) các tham số đó.

Các bộ tham số khác nhau được truy xuất (ví dụ: thông qua tệp cấu hình) bởi FileDownloadsManager: nó biết chính xác tham số nào cần sử dụng để tải xuống tệp phù hợp.

các thông số đó được lưu trữ trong một lớp và tôi có danh sách các phiên bản của lớp này.

Điều đó có nghĩa là tôi có thể tải xuống tệp của mình với nhiều bộ tham số có thể có.

Xung quanh các ParameterSets đó, tôi đã xây dựng ParametersSetsViewModels để tôi có thể hiển thị chúng trong danh sách và thêm một số thuộc tính Chỉ xem. Bên trong, các ParametersSetsViewModels có tham chiếu đến các ParametersSets cơ bản được sử dụng như một nguồn cho các thành viên của View Model.

bây giờ, khi tôi chọn các thông số của mình, tôi muốn tải xuống tệp có liên quan.

Trách nhiệm của người này phải là ai?

Tôi có cảm giác rằng nếu ViewModel quá hoạt động, bằng cách có phương thức trả về tệp đã tải xuống, điều này sẽ trái với mẫu MVVM; Ông nghĩ sao về điều này là gì ?

Phần thưởng: việc tải xuống sẽ khả thi trong nền với BackgroundWorkers hoặc phương pháp không đồng bộ của WebClient.

Trả lời

19

Dường như với tôi rằng tất cả mọi người giả định MVVM không có bộ điều khiển khi họ rời khỏi C. MVVM thực sự là một biến thể của MVC "mà chỉ cần thêm ViewModels".

Có lẽ nó nên được gọi là MVCVM thay thế?

Chế độ xemMô hình chỉ ở đó để gỡ bỏ mã "GUI" khỏi chế độ xem và chứa bất kỳ dữ liệu nào để ràng buộc. ViewModels không nên thực hiện bất kỳ quá trình xử lý nào. Một thử nghiệm tốt là ViewModel của bạn có thể kiểm tra thông qua các bài kiểm tra đơn vị tự động và không phụ thuộc vào nguồn dữ liệu vv. Họ không nên biết dữ liệu thực sự đến từ đâu (hoặc ai đang hiển thị nó).

Mặc dù nó có thể bị bỏ qua/tránh, Bộ điều khiển chịu trách nhiệm quyết định mô hình dữ liệu nào sẽ hiển thị và chế độ xem nào. ViewModel là cầu nối giữa các Mô hình (M trong MVVM) và Chế độ xem. Điều này cho phép tác giả XAML "tách biệt" đơn giản hơn.

Trong câu trả lời cho câu hỏi của bạn, bộ xử lý phải được xử lý. Nếu nó cần cập nhật ViewModel để hiển thị các chỉ báo bận, v.v ... là tốt, nhưng nó không phải là View hoặc Model hoặc trách nhiệm của ViewModel.

+1

Cảm ơn bạn đã có cái nhìn sâu sắc, đặc biệt là sự phản ánh trên "MVCVM": đây chắc chắn là điều đáng nói: Kiểm soát viên vẫn còn sống! –

Các vấn đề liên quan