Ответственность ViewModel - PullRequest
8 голосов
/ 17 августа 2010

Я создаю инструмент, целью которого является загрузка файла на основе нескольких параметров.

Первый шаг заключается в установке (или получении) этих параметров.

Различные наборы параметровизвлекается (скажем, через файлы конфигурации) с помощью FileDownloadsManager: он точно знает, какие параметры использовать для загрузки нужного файла.

эти параметры хранятся в классе, и у меня есть список экземпляров этогоclass.

Это означает, что я могу загрузить свой файл с несколькими возможными наборами параметров.

Вокруг этих ParameterSets я построил ParametersSetsViewModels, чтобы я мог отобразить их в списке и добавить некоторыеСвойства только для просмотра.Внутренне ParametersSetsViewModels имеют ссылку на базовые ParametersSets, используемые в качестве источника для членов модели представления.

Теперь, когда я выбираю свой набор параметров, я хотел бы, чтобы соответствующий файл был загружен.

Чья это ответственность?

У меня такое ощущение, что еслиViewModel слишком активен, имея метод, который возвращает загруженный файл, это было бы против шаблона MVVM;что вы думаете по этому поводу?

Бонус: загрузка должна осуществляться в фоновом режиме с помощью BackgroundWorkers или асинхронных методов WebClient.

1 Ответ

20 голосов
/ 18 августа 2010

Мне кажется, что все предполагают, что у MVVM нет контроллеров, поскольку они не учитывали C. MVVM на самом деле является разновидностью MVC, "которая просто добавляет ViewModels".

Может быть, вместо этого он должен был называться MVCVM?

ViewModels предназначены только для выгрузки кода «GUI» из представления и для хранения любых данных для привязки. ViewModels не должен делать никакой обработки. Хорошим тестом является то, что ваша ViewModel тестируется с помощью автоматических модульных тестов и не зависит от источников данных и т. Д. Они не должны знать, откуда фактически поступают данные (или кто их отображает).

Хотя это можно упустить из виду или избежать, контроллер отвечает за решение, какую модель данных отображать и в каких представлениях. ViewModel - это мост между моделями (M в MVVM) и представлениями. Это позволяет упростить «разделенный» авторинг XAML.

В ответ на ваш вопрос обработка должна выполняться контроллером. Если ему необходимо обновить ViewModel, чтобы отображать индикаторы занятости и т. Д., То это нормально, но это не View или Model или ViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...